BPM Conversion Accumulate Interval

Use SqlFunctions.DateDiff and then averagethe results.


Jose C Gomez
Software Engineer


T: 904.469.1524 mobile

Quis custodiet ipsos custodes?

On Fri, Aug 12, 2016 at 1:06 PM, chan213419@... [vantage] <vantage@yahoogroups.com> wrote:

Â
<div>
  
  
  <p></p><p><span>Good morning,  I was hoping to find some help on a BPM that needs converted from E9 to E10.  This BPM simply gets the average amount of days between two dates in a dataset, and assigns this average to PartPlant.LeadTime.</span></p><p><span><br></span></p><p>The full [working] ABL Code:</p><p><br></p><p>DEF VAR vAv AS Integer INIT 0.</p><p><br></p><p>FOR EACH ttRcvDtl Where ttRcvDtl.Received = true,</p><p>Each PODetail no-lock Where PODetail.PartNum = ttRcvDtl.PartNum And PODetail.COmpany = ttRcvDtl.Company AND PODetail.Date02 &lt;&gt; ?,</p><p>Each RcvDtl no-lock Where RcvDtl.PONum = PODetail.PoNum And RcvDtl.POLine = PODetail.POLine And RcvDtl.Company = PODetail.Company AND RcvDtl.ReceiptDate &lt;&gt; ? BREAK BY PODetail.PartNum:</p><p><br></p><p><span style="white-space:pre-wrap;">	</span>ACCUMULATE INTERVAL (RcvDtl.ReceiptDate, PODetail.Date02, &quot;DAYS&quot;)(AVERAGE BY PODetail.PartNum).<span style="white-space:pre-wrap;">	</span></p><p><br></p><p><span style="white-space:pre-wrap;">	</span>IF LAST-OF(PODetail.PartNum) THEN</p><p><span style="white-space:pre-wrap;">		</span>FOR FIRST PartPlant WHERE PartPlant.Company = PODetail.Company AND PartPlant.PartNum = PODetail.Partnum:</p><p><span style="white-space:pre-wrap;">			</span>IF CAN-FIND(FIRST PartPlant WHERE PartPlant.PartNum = PODetail.PartNum And PartPlant.Company = PODetail.Company)  THEN vAv = (ACCUM AVG BY PODetail.PartNum INTERVAL(RcvDtl.ReceiptDate, PODetail.Date02, &quot;DAYS&quot;)).</p><p><span style="white-space:pre-wrap;">	</span>END.<span style="white-space:pre-wrap;">	</span></p><p><span style="white-space:pre-wrap;">				</span>If vAv &gt; 0 Then Do:</p><p><span style="white-space:pre-wrap;">				</span>Assign PartPlant.LeadTime = vAv.</p><p><span style="white-space:pre-wrap;">				</span>End.</p><p><span style="white-space:pre-wrap;">				</span>Else PartPlant.LeadTime = 0.</p><p><span style="white-space:pre-wrap;">				</span></p><p>END.</p><p><br></p><p>I am stuck when I try to convert this to LINQ.  I know how to get the average for each individual line returned in the query, but summing up each line and returning a result is something else.  Particularly, the code below is exactly where I&#39;m stuck:</p><p><br></p><p>ACCUMULATE INTERVAL (RcvDtl.ReceiptDate, PODetail.Date02, &quot;DAYS&quot;)(AVERAGE BY PODetail.PartNum).<span style="white-space:pre-wrap;">	</span></p><p><br></p><p>IF LAST-OF(PODetail.PartNum) THEN</p><p>  FOR FIRST PartPlant WHERE PartPlant.Company = PODetail.Company AND PartPlant.PartNum =      PODetail.Partnum:</p><p>  IF CAN-FIND(FIRST PartPlant WHERE PartPlant.PartNum = PODetail.PartNum And PartPlant.Company =    PODetail.Company)  THEN vAv = (ACCUM AVG BY PODetail.PartNum  INTERVAL(RcvDtl.ReceiptDate, PODetail.Date02, &quot;DAYS&quot;)).</p><p><br></p><p>Any help or examples are greatly appreciated.  Do I have to create an array, or does one already exist in my query?</p><p></p>

</div>
 


<div style="color:#fff;min-height:0;"></div>

Good morning,  I was hoping to find some help on a BPM that needs converted from E9 to E10.  This BPM simply gets the average amount of days between two dates in a dataset, and assigns this average to PartPlant.LeadTime.


The full [working] ABL Code:


DEF VAR vAv AS Integer INIT 0.


FOR EACH ttRcvDtl Where ttRcvDtl.Received = true,

Each PODetail no-lock Where PODetail.PartNum = ttRcvDtl.PartNum And PODetail.COmpany = ttRcvDtl.Company AND PODetail.Date02 <> ?,

Each RcvDtl no-lock Where RcvDtl.PONum = PODetail.PoNum And RcvDtl.POLine = PODetail.POLine And RcvDtl.Company = PODetail.Company AND RcvDtl.ReceiptDate <> ? BREAK BY PODetail.PartNum:


ACCUMULATE INTERVAL (RcvDtl.ReceiptDate, PODetail.Date02, "DAYS")(AVERAGE BY PODetail.PartNum).


IF LAST-OF(PODetail.PartNum) THEN

FOR FIRST PartPlant WHERE PartPlant.Company = PODetail.Company AND PartPlant.PartNum = PODetail.Partnum:

IF CAN-FIND(FIRST PartPlant WHERE PartPlant.PartNum = PODetail.PartNum And PartPlant.Company = PODetail.Company)  THEN vAv = (ACCUM AVG BY PODetail.PartNum INTERVAL(RcvDtl.ReceiptDate,PODetail.Date02, "DAYS")).

END.

If vAv > 0 Then Do:

Assign PartPlant.LeadTime = vAv.

End.

Else PartPlant.LeadTime = 0.

END.


I am stuck when I try to convert this to LINQ.  I know how to get the average for each individual line returned in the query, but summing up each line and returning a result is something else.  Particularly, the code below is exactly where I'm stuck:


ACCUMULATE INTERVAL (RcvDtl.ReceiptDate, PODetail.Date02, "DAYS")(AVERAGE BY PODetail.PartNum).


IF LAST-OF(PODetail.PartNum) THEN

  FOR FIRST PartPlant WHERE PartPlant.Company = PODetail.Company AND PartPlant.PartNum =      PODetail.Partnum:

  IF CAN-FIND(FIRST PartPlant WHERE PartPlant.PartNum = PODetail.PartNum And PartPlant.Company =    PODetail.Company)  THEN vAv = (ACCUM AVG BY PODetail.PartNum  INTERVAL(RcvDtl.ReceiptDate,PODetail.Date02, "DAYS")).


Any help or examples are greatly appreciated.  Do I have to create an array, or does one already exist in my query?