Translate

Showing posts with label #AX 2012. Show all posts
Showing posts with label #AX 2012. Show all posts

Tuesday, November 12, 2019

Workflow Approvals message tracking X++

Helps to find the approvals tracking like who and all are approved so far for the particular workflow and what are the workflow approval comments as such in X++ code.




private str getworkflowTrackmessage(WorkflowInstanceNumber _instanceNumber)
{
    WORKFLOWTRACKINGSTATUSTABLE w;
    WORKFLOWTRACKINGTABLE wt ;
    WORKFLOWTRACKINGTABLE wt2;
    workflowsteptable wst;
    workflowElementtable wet;
    workflowTrackingWorkItem wtw;
    UserInfo user;
    UserInfo user2;
    str txt,ret;
    workflowtrackingcommenttable wtct;
    boolean first=true;

    while select * from w ORDER BY wt2.CREATEDdATEtIME ASC
       where w.instANCEnUMBER==_instanceNumber//'INS2380404'//INS2383500'//
    join  wt2 where w.recId == wt2.workflowTrackingStatusTable && wt2.USER!='axwfexec'
    join wtct where wt2.RecId==wtct.WorkflowTrackingTable
    outer join wtw where wt2.recId==wtw.workflowTrackingTable
    outer join wst where wst.stepId == wt2.stepId
    // join wet where wet.ElementId == wt2.ElementId
    outer join user where user.id == wt2.User
    outer join user2 where user2.id==wtw.ToUser
    {
        txt ='';
        if (wt2.TrackingType == WorkflowTrackingType::Approval)
        {
            txt = strFmt("%1 : %2 Approved on %3 ", wst.Name, User.name,wt2.createdDateTime);
            if (wtct.Comment != strMin())
            {
                txt = strFmt("%1 ,Comments: %2",txt, wtct.Comment);
            }
            //info(txt);
        }

        if (wt2.TrackingType == WorkflowTrackingType::Delegation)
        {
            txt =strFmt("%1 : %2 Delegated to %3 on %4",wst.Name,User.name,user2.name,wt2.createdDateTime);
            if (wtct.Comment != strMin())
            {
                txt = strFmt("%1 ,Comments: %2",txt, wtct.Comment);
            }
            //info(txt);
        }

         if (wt2.TrackingType == WorkflowTrackingType::Rejection)
        {
            txt = strFmt("%1 : %2 Rejected on %3",wst.Name, User.name,wt2.createdDateTime);
            if (wtct.Comment != strMin())
            {
                txt = strFmt("%1 ,Comments: %2",txt, wtct.Comment);
            }
            //info(txt);
        }

        if (wt2.TrackingType == WorkflowTrackingType::Creation)
        {
            txt =strFmt("%1 : Assigned to user: %2 on %3",wst.Name, User.name,wt2.createdDateTime);
            if (wtct.Comment != strMin())
            {
                txt = strFmt("%1 ,Comments: %2",txt, wtct.Comment);
            }
            //info(txt);
        }

        if (wt2.TrackingType == WorkflowTrackingType::Submission)
        {
            txt = strFmt("Submitted by : %1 on %2", User.name,wt2.createdDateTime);
            if (wtct.Comment != strMin())
            {
                txt = strFmt("%1 ,Comments: %2", txt, wtct.Comment);
            }
            //info(txt);
        }
        if(first)
        {
            ret = txt;
            first = false;
        }
        else
        {
            ret = ret + '\n' + txt;
        }
    }
    return ret;
}

Wednesday, March 20, 2019

Consuming AIF web services deployed from Dynamics Ax from External client- Mobile app

Hi folks,

Hope you are well!!


I have found some interesting things on how to communicate to AX from external client using AIF Websrvice

Once after the service classes is created in AX and deployed under Inbound ports- the svc file exposes the client.

we need to refer this web service reference using C#.

IN VS we need to use 'Add referencne' option and specify the svc file path where it path can be found on AX inbound port.


For example the path looks like this.
http://SERVERNane/MicrosoftDynamicsAXAif60/Messenger/xppservice.svc
where Messanger in the path is the name of the service.

once the service reference is created we need to use and refer that in C# code

using MessangerSolution.MessangerApp;
=>Name of the service refrence created in C# is MessangerApp

declare the service
MessangerApp.BasicHttpBinding_PSV_Messenger app = new BasicHttpBinding_PSV_Messenger();

Providing credentials:
app.UseDefaultCredentials = FALSE;
app.Credentials = new System.Net.NetworkCredential("USERVNAME","SECURE PASSWORD","DOMAIN");

then you can invoke the service class methods like
app.PassMessage();

This also fixes the below issue on network credentials:
System.Net.WebException: The request failed with HTTP status 401: Unauthorized