Wednesday, October 2, 2019

performFormLookup

public void performFormLookup(FormRun _form)
{
    FormDataSource      formDataSource;
    Query               formquery;
;
    formDataSource  = _form.objectSet();
    formquery       = formDataSource.query();


    formquery.dataSourceNo(1).addRange(fieldnum(ProjTable, ProjGroupId)).value(queryValue(ProjGroupIdFilter.text()));
    super(_form);

}

Thursday, July 4, 2019

Insert Record level security with query value in ax 2012 by code (X++)

static void AXCopyUsergroupRLSBytableWithVlaue(Args _args)
{

    SysRecordLevelSecurity  SysRecordLevelSecurity,insertRLS,copyvalue,updatevalues;
    dialogfield srcdf,destdf;
    dialog dialog;
    userGroupid dest;

    sysQueryRun queryRun;
    Query query = new Query() ;

    QueryRun        rlsqueryRun;
    int             dataSourceNo;
    queryBuildDataSource queryBuildDataSource;
    queryBuildRange queryBuildRange;
    int i;





    ;
    dialog = new dialog("copying user group's Record Level security ");

    destdf = dialog.addField(typeid(userGroupid),"Destination");

    if(dialog.run())
    {
     
        dest = destdf.value();
     
      if( dest !="")
        {
          ttsbegin;
       //insert new table in RLS table to destination user group;       
   
            insertRLS.tabId   = 18174;
            insertRLS.groupId = dest;
            insertRLS.companyId = curext();
            insertRLS.insert();     


          //fetch same query values from another table;

            select * from copyvalue
            where copyvalue.groupId == dest
            && copyvalue.tabId == 624;//example project table

            rlsqueryRun = new QueryRun(copyvalue.Restriction);
            dataSourceNo = rlsqueryRun .query().dataSourceCount();
            queryBuildDataSource          = rlsqueryRun .query().dataSourceNo(dataSourceNo);

               for(i = 1;i <= queryBuildDataSource.rangeCount();i++)
               {
                     queryBuildRange      = queryBuildDataSource.range(i);

                   
               }


          select forupdate  updatevalues  where updatevalues.groupId == dest 
           && updatevalues.tabId == 18174;
            if (updatevalues.Restriction)
            {
                queryRun = new SysQueryRun(updatevalues.Restriction);
            }

            else
            {
                query.addDataSource(updatevalues.TabId);
                queryRun = new SysQueryRun(query);
            }

            queryRun.query().dataSourceTable(updatevalues.tabId).addRange(fieldnum(PAYFDocumentMoveTracking,PROJID)).value(queryBuildRange.value());
            updatevalues.restriction = queryRun.pack();
            updatevalues.doUpdate();

            ttscommit;
            info("User groups RLS has been copied!");
        }
    }
    else
    {
        info("Canceled by user");
    }


}

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...