Tuesday, January 8, 2019

Create weekly periods between two dates











Method:

void GenerateOneYearWeekPeriods()
{
    date d1,d2,d3,d4,wkst,wkend,i,k;
    integer                 lineNum = 0;

    int findlastrecid()
    {

        select * from  FAHWeeklyTimeSheetPeriods order by Recid Desc;
        return FAHWeeklyTimeSheetPeriods.LineNum;


    }






    ;
    d1 = Stratdate.dateValue();
    d2 = Enddate.dateValue();
    lineNum = findlastrecid();


    if(!FAHWeeklyTimeSheetPeriods::exist(d1))
    {
        for(i = d1 ; i <= d2 ; i++)
        {
           if(mthofyr(i) == 1)
           {
               if(dayofwk(i) == 6 || i == d1 )//sat && start of the month
               {
               wkst = i;
               }

               if(dayofwk(i) == 5  || i == endmth(i))//fri && end of the month
               {
               wkend  = i;

                     lineNum++;

                     FAHWeeklyTimeSheetPeriods.LineNum = lineNum;
                     FAHWeeklyTimeSheetPeriods.Weekcode = NumberSeq::newGetNum(ProjParameters::numRefFAHWeekCode(),true).num();
                     FAHWeeklyTimeSheetPeriods.PeriodId = mthofyr(i);
                     FAHWeeklyTimeSheetPeriods.Month = global::dateStartMth(i);
                     FAHWeeklyTimeSheetPeriods.Year  = year(FAHWeeklyTimeSheetPeriods.Month);

                     FAHWeeklyTimeSheetPeriods.StratDate = wkst;
                     FAHWeeklyTimeSheetPeriods.StratDay = dayName(dayofwk(wkst));
                     FAHWeeklyTimeSheetPeriods.EndDate  = wkend;
                     FAHWeeklyTimeSheetPeriods.EndDay   = dayName(dayofwk(wkend));
                     FAHWeeklyTimeSheetPeriods.Status  = WeekPeriodStatus::open;
                     FAHWeeklyTimeSheetPeriods.insert();
               }
            }

            if(mthofyr(k) != mthofyr(i))
            {
             d3 = i ; d4 = endmth(i);

               for( k = d3 ; k <= d4; k++)
               {
                   if(dayofwk(k) == 6 || k == d3 )//sat && start of the month
                   {
                   wkst = k;
                   }

                   if(dayofwk(k) == 5  || k == d4 )//fri && end of the month
                   {
                   wkend  = k;

                     lineNum++;

                     FAHWeeklyTimeSheetPeriods.LineNum = lineNum;
                     FAHWeeklyTimeSheetPeriods.Weekcode = NumberSeq::newGetNum(ProjParameters::numRefFAHWeekCode(),true).num();
                     FAHWeeklyTimeSheetPeriods.PeriodId = mthofyr(i);
                     FAHWeeklyTimeSheetPeriods.Month = global::dateStartMth(i);
                     FAHWeeklyTimeSheetPeriods.Year  = year(FAHWeeklyTimeSheetPeriods.Month);
                     FAHWeeklyTimeSheetPeriods.StratDate = wkst;
                     FAHWeeklyTimeSheetPeriods.StratDay = dayName(dayofwk(wkst));
                     FAHWeeklyTimeSheetPeriods.EndDate  = wkend;
                     FAHWeeklyTimeSheetPeriods.EndDay   = dayName(dayofwk(wkend));
                     FAHWeeklyTimeSheetPeriods.Status  = WeekPeriodStatus::open;
                     FAHWeeklyTimeSheetPeriods.insert();
                   }
               }
              k = i ;
            }
        }
      }

    FAHWeeklyTimeSheetPeriods_ds.executeQuery();

}






Workflow Mass Reassign users

static void AXworkflowMassReassign(Args _args)
{
    userid src,dest;
    name comment;
    WorkflowWorkItemSubject subject;
    WorkflowConfigurationName confignme;
    WorkflowSequenceNumberActive congifId;
    dialogfield srcdf,destdf,comtdf,subjectDf,congifIdDf,confignamedf;
    dialog dialog;
    WorkflowWorkItemTable workitems;
    WorkflowTrackingStatusTable WorkflowTrackingStatusTable;

    WorkflowConfigurationTable WorkflowConfigurationTable;
    boolean isFieldModified;





    int i;
    ;
    dialog = new dialog("Mass Re-assign workflow ");
    srcdf = dialog.addField(typeid(userid),"Source");
    destdf = dialog.addField(typeid(userid),"Destination");
    comtdf = dialog.addField(typeid(name),"Comments");
    congifIdDf = dialog.addField(typeid(WorkflowSequenceNumberActive),"Configuration Id");
   // confignamedf = dialog.addFieldValue(typeid(name),"","Configuration name");
    subjectDf = dialog.addField(typeid(WorkflowWorkItemSubject),"Subject");
    comtdf.displayLength(50);
  //  confignamedf.allowEdit(false);




     if(dialog.run())
    {
        src = srcdf.value();
        dest = destdf.value();
        comment =comtdf.value();
        congifId = congifIdDf.value();
        subject = subjectdf.value();
        WorkflowConfigurationTable = WorkflowConfigurationTable::findSequenceNumber(congifId,false);

        if(src!="" && dest !="")
        {

            if(subject == "" && congifId == "" )
            {
            while select workitems where workitems.Status == WorkflowWorkItemStatus::Pending
            && workitems.UserId == src

                {
                    WorkflowWorkItem::delegateWorkItem(workitems.Id, dest, comment);
                    i++;
                }
            }


            if(congifId != "" && subject == "")
            {
              while select workitems where
              workitems.Status == WorkflowWorkItemStatus::Pending &&
               workitems.UserId == src
              && workitems.ConfigurationId == WorkflowConfigurationTable.ConfigurationId
                {
                    WorkflowWorkItem::delegateWorkItem(workitems.Id, dest, comment);
                    i++;
                }
            }




            if(subject != "" && congifId == "" )
            {
                while select workitems where workitems.Status == WorkflowWorkItemStatus::Pending && workitems.UserId == src
                 && workitems.subject == subject
                {
                    WorkflowWorkItem::delegateWorkItem(workitems.Id, dest, comment);
                    i++;
                }
             }



            info(strFmt("Pending workflow workitems  re-assigned: %1",i));
        }
    }
    else
    {
        info("Canceled by user");
    }


}

Progress bar for lengthy operation on data source execute query in ax



Write this following method any on class:

Public static client SysOperationProgress showWaitDialog(str _text = "Extracting record for you, please wait...")
{
    #AviFiles
    SysOperationProgress waitDialog;

    waitDialog = new SysOperationProgress(1, true, strLen(_text));

    waitDialog.setCaption("Processing...");
  //  waitDialog.setTotal(100);
    waitDialog.setCount(1);
    waitDialog.setAnimation(#AviStopWatch);
    waitDialog.setText(_text);

    return waitDialog;
}



Call from datasource executequery() method:

public void executeQuery()
{
   SysOperationProgress waitdialog;
   ;
   waitdialog = global::showWaitDialog();  // startLengthyOperation();
   super();
   waitdialog.hide();  //  endLengthyOperation();
}

Sending Email using X++ Code in D365 F&O/ AX 7 in HTML fomat

  I was just researching on the emailing capabilities in D365 and found that SysINetMail, SysMailer and some of the smmOutlook classes are d...