D365 Finance and Operations Archives - Page 13 of 25 - - Page 13

Category Archives: D365 Finance and Operations

CloudFronts Dynamics 365 Finance & Operations Update Steps & Protocol

Microsoft is committed to delivering predictable service updates. These service updates will be made generally available for self-deployment approximately 2 weeks before Microsoft automatically applying the update. Some of these updates can have a lot of changes in it and this can impact any customization done on the client’s environment. Thus it becomes very important for a partner to do complete testing before any update is applied. CloudFronts is dedicated to ensuring business continuity of the client and thus have protocols set up to ensure nothing gets impacted on the client’s production environment. Following are the protocols for the same : Service Update Availability – Key points:  Each service is released by the Microsoft which has following dates criteria: Preview availability date:  When the update is in preview by Microsoft. Generally available (self-update) date: This update will be made generally available for self-deployment approximately 2 weeks before Microsoft automatically applying the update. Auto-update schedule (via LCS update settings) production start date: A date for applying the service update in the production environment. End of service date: Date from when service update is over. Referenced image: For checking the release dates for the above criteria, link as: https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/fin-ops/get-started/public-preview-releases How Long it can be delayed for Next Service Update? The customer can pause, delay, or opt-out of an update via Update Settings in the Lifecycle Services projects. A customer can choose to pause up to 3 consecutive updates. The following is an example of a delayed update: The customer is currently on version 10.0.2. The customer can pause updates 10.0.3, 10.0.4, and 10.0.5. The customer must take the 10.0.6 update when it is available. Upcoming Schedule of Update The customer has the option to apply the update when it is convenient, or let Microsoft auto-apply the service updates based on the selected maintenance window. Customer must require to have an update no older than 4 months Critical Issues Critical issues should always be submitted to the support team via Lifecycle Services as soon as they are identified. The support staff will work with you on the resolution to the critical issue. Path for Early Service Update Scheduling Go to LCS -> Project settings Update settings Pausing the service update temporarily.  As shown in the below image, when updates resume, the designated sandbox and production environment will be updated to the latest service update before it can be paused again. HOW TO CHECK UPCOMING UPDATES FROM LCS? In update setting -> click on view the update calendar It looks like: This will help us to plan the next scheduling for service updates. According to this, we can plan the next calendar for upcoming service update CLOUDFRONTS PROTOCOL FOR TRACKING DOWN THE ENVIRONMENT DETAILS We have added the field ERP version in D365 PSA where the project lead will update the version of the production environment. After every update, it is the Project Lead’s responsibility to update this field. Every Monday we have a scheduled recurring management meeting where the CEO, Delivery Head and Practice Lead discuss the status of each project by opening a Project Overview Report developed in Power BI. The same report has the column of ERP version so that the management is aware of the client’s D365 Finance & Operations version.   CLOUDFRONTS STEPS FOR KEEPING THE ENVIRONMENT UP TO DATE For each client our support system would have one case created specifically for the updates and it will be assigned to the Project Lead. The Details of the case is as follows: Case name:  Environment update – Client name Notes:  ERP Environment version details and the next path for service update Follow-up date:  Follow-up date would be one month from the current date and till then the case will be on hold. Based on the follow up date system will automatically send the email to the assigned person so that he is intimated to work on the case. Based on this the user needs to check for updates on the LCS and follow the steps based on this document. STEPS FOR APPLYING SERVICE UPDATE – DEV / CLOUD HOSTED Key points:  Before applying the service update on UAT, service update must be applied successfully on the Build and Test Environment or Cloud-hosted environment Sequence for applying update on the environment  Build and Test Environment / Cloud-hosted environment UAT / Sandbox Production Before applying the service update, all the models should be a build-up The database must be synchronized Check if any AOT (Application Object Tree) objects are under pending changes in VSTS / TFS All the AOT objects should be checked in to VSTS Steps for applying the service update on the development environment are the same as applying to the UAT environment. Hence steps are listed on the next page. STEPS FOR APPLYING SERVICE UPDATE – UAT Go to the LCS -> Select the appropriate projectof the environment Select the UAT appropriate environment-> Click on full details Scroll down to check the latest update. In this part, we will able to see all the latest service updates. Select the appropriate service update on which we have planned to do. Click on View update. Here, we’re taking an example of moving the environment on 10.0.12 Go to Savepackage Click on Select all. Make sure all the packages are selected. Click on Save packageand then give the appropriate Service update name and then click on save the package. It will save all the hotfixes. Wait for a few moments (It can take 5-10 minutes depends on the number of packages are being loaded). After successfully saved the packages, click on Done button Go back to the environment page and then click on Maintain-> Apply updates We had given the name Service Update 10.0.12which should be shown here to apply the update In some cases, the package will not appear suddenly. What to do in such a case? Let’s see the next step on how to verify that. Go to Asset library Click on Software deployable packageand then navigate to our service package Have a look on the column – Valid. If it is not signed with the right symbol then keep patience until it is done. Once the package is validated successfully, we will able to deploy the service update to the environment. After validating the deployable package, we can see the package and just one step away for applying the service update. Click on the Apply button. TESTING – RSAT … Continue reading CloudFronts Dynamics 365 Finance & Operations Update Steps & Protocol

Share Story :

Sales return order line registration in D365FO and AX 2012

Introduction: Sales return order line registration in X++ Details:  Consider SalesReturnOrderRegisterLine is the table where records are with SalesLine referenced. If we are required to register serialized items than salesReturnOrderRegisterLine.inventSerialId will be considered and if item referred with batch then salesReturnOrderRegisterLine.inventBatchId will be considered. public static void inventoryRegistration(SalesId _salesId) { SalesReturnOrderRegisterLine salesReturnOrderRegisterLine; SalesLine salesLine; TmpInventTransWMS tmpInventTransWMS; InventTransWMS_Register inventTransWMS_Register; InventDim inventDim; InventTrans inventTrans; VendPackingSlipTrans vendPackingSlipTransLoc; InventTransOrigin inventTransOrigin; while select salesReturnOrderRegisterLine where salesReturnOrderRegisterLine.SalesId == _salesId { salesLine = SalesReturnOrderRegister::updateDispositionCode(salesReturnOrderRegisterLine.InventTransId); inventTransWMS_Register = InventTransWMS_Register::newStandard(tmpInventTransWMS); select firstonly inventTrans where inventTrans.StatusReceipt == StatusReceipt::Ordered exists join inventTransOrigin where inventTransOrigin.RecId == inventTrans.InventTransOrigin && inventTransOrigin.InventTransId == salesLine.InventTransId && inventTransOrigin.ReferenceId == _salesId; tmpInventTransWMS.clear(); tmpInventTransWMS.initFromInventTrans(inventTrans); tmpInventTransWMS.InventQty = salesReturnOrderRegisterLine.SalesQty; tmpInventTransWMS.LineNum = int642int(salesLine.LineNum); inventDim = salesLine.inventDim(); inventDim.inventSerialId = salesReturnOrderRegisterLine.inventSerialId; inventDim.inventBatchId = salesReturnOrderRegisterLine.inventBatchId; tmpInventTransWMS.InventDimId = InventDim::findOrCreate(inventDim).inventDimId; tmpInventTransWMS.ItemId = salesLine.ItemId; inventTransWMS_Register.writeTmpInventTransWMS(tmpInventTransWMS, inventTrans, InventDim::find(tmpInventTransWMS.InventDimId)); if (!inventTransWMS_Register.updateInvent(salesLine)) { throw error(“Error during sales return order registration”); } } } Consider SalesReturnOrderRegister is the class which has below static methods public static SalesLine updateDispositionCode(InventTransId _inventTransId) { SalesLine salesLine = SalesLine::findInventTransId(_inventTransId, true); ReturnDispositionCode returnDispositionCode; SalesReturnOrderRegister::runPreReturnOrderRegisterLine(salesLine); salesLine.ReturnDispositionCodeId = returnDispositionCode.DispositionCodeId; salesLine.update(); return salesLine; } public static void runPreReturnOrderRegisterLine(SalesLine _salesLine) { InventTransOriginId salesLineInventTransOriginId; InventTransOriginId reservationLineInventTransOriginId; SalesLine reservationLine; ReturnDispositionCode returnDispositionCode; if (_salesLine.ReturnStatus == ReturnStatusLine::Awaiting) { if (!_salesLine.ReturnAllowReservation && _salesLine.isStocked()) { SalesLine::changeReturnOrderType(_salesLine.InventTransId); _salesLine = SalesLine::findInventTransId(_salesLine.InventTransId, true); } select firstOnly returnDispositionCode where returnDispositionCode.DispositionAction == DispositionAction::Credit; _salesLine.ReturnDispositionCodeId = returnDispositionCode.DispositionCodeId; _salesLine.update(); } else if (_salesLine.ReturnStatus == ReturnStatusLine::Registered) { select forupdate firstonly reservationLine where reservationLine.InventRefTransId == _salesLine.InventTransId; if (reservationLine || _salesLine.qtyMarked()) { if ((_salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReplaceScrap || _salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReturnToCust || _salesLine.returnDispositionCode().DispositionAction == DispositionAction::Scrap)) { if (reservationLine.SalesQty == reservationLine.RemainSalesPhysical) { reservationLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(reservationLine.DataAreaId, reservationLine.InventTransId); salesLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(_salesLine.DataAreaId, _salesLine.InventTransId); InventTransOrigin::deleteMarking(salesLineInventTransOriginId, reservationLineInventTransOriginId, -_salesLine.QtyOrdered); reservationLine.delete(); } } else { throw error(“@SYS332911”); } } } } Thanks for reading and stay connected with us for more updates!!! Jagdish Solanki | Senior Technical Consultant | CloudFronts Business Empowering Solutions Team “Solving Complex Business Challenges with Microsoft Dynamics 365 & Power Platform”

Share Story :

Factbox of workflow history on purchase order in D365FO

Introduction: In this blog, we will see how to create factbox of workflow history of purchase order in Microsoft Dynamics 365 Finance and Operations Details:  Well, Factbox is a very pretty cool feature available from the earlier version AX 2012. It is very easy to achieve in Dynamics 365 as well.  Here we will see how easy it is and steps for that.    As shown in the above image, we will be going to create factbox for the “Tracking details list” Steps:  Create the solution in Visual Studio and project for that. We’ll be required four objects mainly that is one display MenuItem, Table, Form (on which to display factbox), another Form (factbox). Reference attached below: 1. Table For displaying workflow history, we need to create the extension of table WorkflowTrackingStatusTable and create the normal relation and its relevant properties as 2. Factbox Now we are required to create the factbox of workflow history. For that we will use the effortless technique, where we will duplicate the standard form “WorkflowStatus” and will name as CFSPurchTableWorkflowHistoryFactBox (give name as per your naming convention standards) After duplicating and renaming the form, we need to change the pattern as “custom” After applying the custom pattern, delete the NavigationList which is not required in factbox, and do visible false ActionPane and PanelTab After that create the new Grid and assign the data source to it in the property and put all the required fields to show in factbox 3. Display MenuItem We will attach the created factbox form to the display menu item and relevant label “Workflow history” 4. Base form Base form we call it as where we will attach the factbox. Here it is purchase form. Go to Parm section and create a new part and give it a relevant name and its properties Properties:  Data source: Attached data source with which workflow history is connected Data Source Relation: WorkflowTable.RelationName Name: Part name That’s it. Build the project and go the frontend and check the output how it looks like. Conclusion: It results as (we can scroll left and right to see all the tracking details list) Hurray, How pretty it looks like! In the above example, we have seen how we can develop factbox in Microsoft Dynamics 365 Finance and Operations.   Thanks for reading and stay connected with us for more updates!!! Jagdish Solanki | Senior Technical Consultant | CloudFronts Business Empowering Solutions Team “Solving Complex Business Challenges with Microsoft Dynamics 365 & Power Platform”

Share Story :

Message API – Message::AddAction() in D365FO Version 10.0.10 PU34 | New Feature

Introduction: From the version 10.0.10 Platform update 34, Microsoft has added a new feature Message::AddAction() which is shown in the message bar.  Details: Message API associated with display or action menu items, which is visualized as a hyperlink/link button.  It is linked with a single record at a time, called single action. In below taken example, we will show sales order is navigated to the form SalesTable from the message bar. For testing it, we’ll create the runnable class also know as job in AX 2012.  class CFSMessageAPI { public static void main(Args _args) { SalesTable salesTable = SalesTable::find(‘SH-000121′); MenuItemMessageAction actionData = new MenuItemMessageAction(); actionData.MenuItemName(menuItemDisplayStr(SalesTable)); actionData.TableName(tableStr(SalesTable)); actionData.RecId(salesTable.RecId); str jsonData = FormJsonSerializer::serializeClass(actionData); int64 messageId = Message::AddAction(MessageSeverity::Informational, “Sales order details”, salesTable.customerName(), MessageActionType::DisplayMenuItem, jsonData); } } Let’s see how it works,  In my case it’s showing Mitchell. Click on the link.  After clicking on the action link, it is navigated to the sales order record form as shown in the above link.  Hurray, How pretty feature is released !!! Conclusion: In above example, we have seen how Message API is routed to the record. Thanks for reading !!!

Share Story :

Email Parameters | SMTP Configurations for sending Test Mail from D365FO

Introduction: In this blog, we will see how to set up email parameters and SMTP configuration for sending test mail from Microsoft Dynamics 365 Finance and Operations. Details:  Go to the Email Parameters by follow this path: System administration -> Setup -> Email -> Email Parameter. Another easiest way to find the email parameter in a quick manner, go to the search box and simply write email parameter as below shown screenshot Steps:  1. In the configuration tab, set up the SMTP as in shown below image Move SMTP in the right box named with ENABLED to enable  2. In SMTP settings tab, configure the below stuff:      Outgoing mail server: smtp.office365.com     SMTP port number: 587     Username: put the email id from which email should be sent      Password: appropriate password of the email     Specify if SSL is required: true 3. In Test mail tab:      Email provider: SMTP     Send to: Put the email to whom test mail should be sent  In the final, click on the “Send test mail” and then sample mail will be sent to the respective email address.      Conclusion: In the above blog, we have seen how to set up SMTP configuration to test “send email” functionality from the email parameter form.  Thanks for reading !!!

Share Story :

Create new aggregate measurement / Entity store in D365 Finance and Operation to be consumed in Power BI report in D365 Finance and Operations

In D365 there are several option to export/Import data like Data Entities, BYOD, Aggregate measurements/Entity store. In this blog we will learn How to create entity store in D365 Finance and operations. Aggregate Measurements/Entity Stores are use to create Power Bi reports with nearly Live data where user have option to set its recurrence that is how often you want to refresh entity store there is no need to manually refresh the data as per suggested Batch job will run for respective entity stores. You can also forcefully refresh data by pressing refresh button on entity store page. So lets start with development of aggregate measurements, aggregate dimensions. Add New aggregate measurements object to the project where we required Add required attributes Add required measures Add required dimensions Add dimensions where view of dimension and aggregate measurements are different Build The Model Refresh Entity store from D365 Finance and Operation Environment Verify that respected view is created for aggregate measurement                     Add New aggregate measurements object to the project where we required.   In this step we need to right click on new item     Now select aggregate measurement and name it as per requirement in our case its “CFSAggregateMeasrure”   Now assign required views in table property of the aggregate measurement as follow     In my case I have selected “InventOnHandByWarehouse” view.                       Add required attributes Now add required attribute by right click on Attributes and assign required field in attributes as follows                         Add required measures After adding attributes add dimensions same how we added other attributes as follows   After adding measure assign required field to it and operation which you want to perform on that field (for example. :- count, Average, etc. )                           Add required dimensions By default some of the dimensions are provided like company and date which are showed in screen shot. And assign required fields in relation of dimensions                            Add dimensions where view of dimension and aggregate measurements are different If dimensions needs different view we need to create new aggregate dimension as follows   In my  case name of aggregate dimension is “CFSAggregateDimension ” Now assign required view to dimension as follows.     After this create new attributes and assign fields to that attributes as follows       After adding new dimension attribute if required you can assign more than one field reference as follows   After this step assign fields to the respective field reference as follows.     Now select the respected attribute and select its usage property and change it as key which will make it as dimensional key which will be helpful while making relations.     There are 3 options under usage property description of each as follows                               Key If you specify usage property as “key” system will define the key of the dimension using this attribute                               Parent If you specify usage property as “parent” system will parent child hierarchy with this field as parent level.                               Regular If you specify usage property as “Regular” ,this is an attribute without any special behavior and it is default value. After setting usage property attach this dimension to our aggregate measurement by dropping required aggregate measurement on dimension section of it.   Now define its dimension attribute property as follows   After this you need to make relationship among the views as follows   Fact Dimension If you want to make desired aggregate dimension as fact dimension go to desired dimension in aggregate measurement and make set “is fact dimension” property to yes/No as follows                       Build The Model   After this case build the model which is used for this development of project as follows                             Refresh Entity store from D365 Finance and Operation Environment   After successful build go to environment page’s Entity store section using following navigation System administration >> setup >> entity store and refresh the desired entity     On required entity please press the refresh button     You can also set schedule to refresh this entity by selecting edit button and enable its automatic refresh toggle and the set its recurrence as follows                             Verify that respected view is created for aggregate measurement In final step go to your VM’s SSMS and look for Axdw database in which in view section look for views with your aggregate measurement and dimension and name as follows   After select query you can see the data of that view     Now your entity store is ready to consume by power bi reporting service. Thank You!

Share Story :

Import CSV file in D365 for Finance and Operation using X++

Below is a simple example for importing data from CSV file in D365 FO using X++: /// <summary> /// import color code /// </summary> class CFSImportColorCode {     /// <summary>     /// main     /// </summary>     /// <param name = “_args”>_args</param>     public static void main(Args _args)     {         AsciiStreamIo                       file;         Array                               fileLines;         FileUploadTemporaryStorageResult    fileUpload;         CFSEcoResColorCode                  colorCode;         CFSImportColorCode                  importColorCode = new CFSImportColorCode();         Counter                             counter = 0;         EcoResColorName                     color;         #OCCRetryCount         try         {             //Upload a file             fileUpload  = File::GetFileFromUser() as FileUploadTemporaryStorageResult;             file        = AsciiStreamIo::constructForRead(fileUpload.openResult());             if (file)             {                 if (file.status())                 {                     throw error(“@SYS52680”);                 }                 file.inFieldDelimiter(‘;’); //separator                 file.inRecordDelimiter(‘\r\n’);             }             //Read a CSV File             container rec;             ttsbegin;             while (!file.status())             {                 counter++;                 rec = file.read();                 if (conLen(rec))                 {                     color = conPeek(rec, 2);                     colorCode = CFSEcoResColorCode::find(color);                     if(!colorCode.RecId)                     {                         colorCode.clear();                         colorCode.Name  = color;                         colorCode.Code  = conPeek(rec, 1);                         colorCode.insert();                     }                 }             }             ttscommit;             info(“Operation complete.”);         }         catch (Exception::Deadlock)         {             retry;         }         catch (Exception::UpdateConflict)         {             if (appl.ttsLevel() == 0)             {                 if (xSession::currentRetryCount() >= #RetryNum)                 {                     throw Exception::UpdateConflictNotRecovered;                 }                 else                 {                     retry;                 }             }             else             {                 throw Exception::UpdateConflict;             }         }     } }

Share Story :

How to delete workspace from TFS Visual Studio

Introduction: In this blog, we will see how we can delete any of the TFS workspace which is assigned to different user Even if tried to remove/delete the workspace from Visual Studio, We’re unable to map existing workspace to new user.   In such scenario, It is necessary to delete the workspace explicitly while getting the error as below  “The working folder ‘Workspace_Folder_Local_Path’ is already in use by the workspace : on computer Solution:  1. Open Developer Command Prompt for VS2015 from Start menu 2. For getting the list of workspaces associated with user, run below command tf workspaces /server:https://{TFS}.visualstudio.com/{CollectionName} /owner:”{Owner}” Explanation, in my case {TFS} is xxxx.visualstudio.com/defaultcollection and {Owner} as Jagdish Solanki, Eventually it will look something like this, tf workspaces /server:https://xxxx.visualstudio.com/{CollectionName} /owner:”Jagdish Solanki” Reference: 3. To delete the workspace, run below command  tf workspace /server:https://{TFS}.visualstudio.com/defaultcollection /delete “{Workspace};{Owner}” It will looks something like this, tf workspace /server:https://xxxx.visualstudio.com/defaultcollection /delete “SCM-DEV-1;Jagdish Solanki” Once the above command is executed, system will prompt you if user has any pending change(s). Are you sure want to delete the workspace? (Yes/No). Enter yes Reference: 

Share Story :

“Cannot delete a record in batch job(BatchJob). The corresponding AOS validation failed “while deleting batch job

while you want to delete batch job in Finance and operation you may have faced error as follows “Cannot delete a record in batch job(BatchJob). The corresponding AOS validation failed”.                This blog will be helpful to resolve this issue, just follow mentioned steps. Go to batch job(system administation >> inquiries  >> batch jobs) select batch jobs which you want to delete and press button change status now change its status to canceling as follows after which jobs status will change to canceling and after that it will automatically change to waiting state now try to delete it by pressing delete button. Now select yes to delete record And you have successfully deleted the record. Hope this blog was helpful to you.

Share Story :

Enable/Disable & Visibility an Action pane button on a list page using interaction class in D365

Introduction: In this blog, we will see how we can enable/disable or change the visibility of the form control in interaction class. Standard behavior of the form, system does not allow us to write code on form which comes under form template -> List page It Seems like below attached image (Here we will consider form VendTableListPage. Property of form as shown below) Each ListPage form consisting with an interaction class as shown in property, Here it is VendTableListInteraction. Each interaction class has one override method which is selectionchanged() Solution:  Here we will override the method of selectionchanged() as below [ExtensionOf(classStr(VendTableListPageInteraction))] final class VendTableListPageInteractionCFSJSClass_Extension public void selectionChanged() { next selectionChanged(); //for visibility this.listPage().actionPaneControlVisible(formControlStr(VendTableListPage, ), false); //for enable/disable this.listPage().actionPaneControlEnabled(formControlStr(VendTableListPage, true); } For all other ListPage, we can go through interaction class. For reference, go through below mentioned classes: AgreementListPageInteraction BankDocumentTableListPageInteraction CatProcureOrderListPageInteraction CatVendorCatalogListPageInteraction CustBillOfExchEndorseListPageInteraction CustomsExportOrderListPageInteraction CustPDCListPageInteraction CustPDCSettleListPageInteraction CzCustAdvanceInvoiceListPageInteraction CzVendAdvanceInvoiceListPageInteraction EcoResCategoryHierarchyPageInteraction EcoResProductListPageInteraction EmplAdvTableListPageInteraction EntAssetObjectCalendarListPageInteraction EntAssetWorkOrderPurchaseListPageInteraction EntAssetWorkOrderPurchReqListPageInteraction EntAssetWorkOrderScheduleListPageInteraction EPRetailPickingListPageInteraction EPRetailStockCountListPageInteraction EximAuthorizationListPageInteraction EximDEPBListPageInteraction EximEPCGListPageInteraction GlobalAddBookListPageInteraction HcmCourseAttendeeListPageInteraction HcmWorkerAdvHoldTableListPageInteraction InventBatchJournalListPageInteraction InventDimListPageInteractionAdapter JmgProdStatusListPageInteraction JmgProjStatusListPageInteraction PCProductModelListPageInteraction PMFSeqReqRouteChangesListPageInteraction ProdBOMVendorListPageInteraction ProdRouteJobListPageInteraction ProdTableListPageInteraction ProjForecastListPageInteraction ProjInvoiceListPageInteraction ProjInvoiceProposalListPageInteraction ProjProjectContractsListPageInteraction ProjProjectsListPageInteraction projProjectTransListPageInteraction ProjUnpostedTransListPageInteraction PurchCORListPageInteraction PurchCORRejectsListPageInteraction PurchLineBackOrderListPageInteraction PurchReqTableListPageInteraction PurchRFQCaseTableListPageInteraction PurchRFQReplyTableListPageInteraction PurchRFQVendorListPageInteraction_PSN PurchRFQvendTableListPageInteraction PurchTableVersionListPageInteraction ReqTransActionListPageInteraction ReqTransFuturesListPageInteraction ReqTransListPageInteraction RetailOnlineChannelListPageInteraction RetailSPOnlineStoreListPageInteraction ReturnTableListPageInteraction SalesAgreementListPageInteraction SalesQuotationListPageInteraction SalesTableListPageInteraction SysListPageInteractionBase SysUserRequestListPageInteraction UserRequestExternalListPageInteraction UserRequestListPageInteraction VendEditInvoiceHeaderStagingListPageInteraction VendNotificationListPageInteraction VendPackingSlipJourListPageInteraction VendPDCListPageInteraction VendPDCSettleListPageInteraction VendProfileContactListPageInteraction VendPurchOrderJournalListPageInteraction VendRequestCategoryListPageInteraction VendRequestListPageInteraction VendRequestWorkerListPageInteraction VendTableListPageInteraction VendUnrealizedRevListPageInteraction Thanks for reading !!!

Share Story :

SEARCH BLOGS:

FOLLOW CLOUDFRONTS BLOG :


Secured By miniOrange