x++ code to get workline details using custom service in D365 F&O

 Request Class :

[DataContractAttribute("BASWorkLineDetailsRequestContract")]

class BASWorkLineDetailsRequestContract

{

    str       workId;

    str       dataAreaId;


    [DataMemberAttribute("WorkId")]

    public str parmworkId(str _workId = workId)

    {

        workId = _workId;

        return workId;

    }


    [DataMemberAttribute("dataAreaId")]

    public str parmdataAreaId(str _dataAreaId = dataAreaId)

    {

        dataAreaId = _dataAreaId;

        return dataAreaId;

    }

}


Response Class :

[DataContractAttribute("BASWorkLineDetailsResponseContract")]

class BASWorkLineDetailsResponseContract

{

    str            workStatus;

    str            site;

    str            warehouse;

    str            itemId;

    str            location;

    str            productName;

    real           workQuantity;

    real           remaningQuantity;

    str            unit;

    str            workType;

    str            size;

    str            color;

    str            configuration;

    List           errorList;

    

    [DataMember('WorkStatus')]

    public str parmWorkStatus(str _workStatus = workStatus)

    {

        workStatus = _workStatus;

        return workStatus;

    }


    [DataMember('Site')]

    public str parmSite(str _site = site)

    {

        site = _site;

        return site;

    }


    [DataMember('Warehouse')]

    public str parmWarehouse(str _warehouse = warehouse)

    {

        warehouse = _warehouse;

        return warehouse;

    }


    [DataMember('ItemId')]

    public str parmItemId(str _itemId = itemId)

    {

        itemId = _itemId;

        return itemId;

    }


    [DataMember('Location')]

    public str parmLocation(str _location = location)

    {

        location = _location;

        return location;

    }


    [DataMember('ProductName')]

    public str parmProductName(str _productName = productName)

    {

        productName = _productName;

        return productName;

    }


    [DataMember('WorkQuantity')]

    public real parmWorkQuantity(real _workQuantity = workQuantity)

    {

        workQuantity = _workQuantity;

        return workQuantity;

    }


    [DataMember('RemaningQuantity')]

    public real parmRemaningQuantity(real _remaningQuantity = remaningQuantity)

    {

        remaningQuantity = _remaningQuantity;

        return remaningQuantity;

    }


    [DataMember('Unit')]

    public str parmUnit(str _unit = unit)

    {

        unit = _unit;

        return unit;

    }


    [DataMember('WorkType')]

    public str parmWorkType(str _workType = workType)

    {

        workType = _workType;

        return workType;

    }


    [DataMember('Size')]

    public str parmSize(str _size = size)

    {

        size = _size;

        return size;

    }


    [DataMember('Color')]

    public str parmColor(str _color = color)

    {

        color = _color;

        return color;

    }


    [DataMember('Configuration')]

    public str parmConfiguration(str _configuration = configuration)

    {

        configuration = _configuration;

        return configuration;

    }


    [DataMember('ErrorList')]

    public List parmErrorList(List _errorList = errorList)

    {

        errorList = _errorList;

        return errorList;

    }


    private static BASWorkLineDetailsResponseContract construct()

    {

        return new BASWorkLineDetailsResponseContract();

    }


    public static BASWorkLineDetailsResponseContract newFromTableRecord(WHSWorkLine _workLine,List _errorList, InventDim _inventDim)

    {

        BASWorkLineDetailsResponseContract  contract = BASWorkLineDetailsResponseContract::construct();

        contract.parmWorkStatus(enum2Str(_workLine.WorkStatus));

        contract.parmSite(_inventDim.InventSiteId);

        contract.parmWarehouse(_inventDim.InventLocationId);

        contract.parmItemId(_workLine.ItemId);

        contract.parmLocation(_workLine.WMSLocationId);

        contract.parmProductName(_workLine.displayItemName());

        contract.parmWorkQuantity(_workLine.QtyWork);

        contract.parmRemaningQuantity(_workLine.QtyRemain);

        contract.parmUnit(_workLine.UnitId);

        contract.parmWorkType(enum2Str(_workLine.WorkType));

        contract.parmSize(_inventDim.InventSizeId);

        contract.parmColor(_inventDim.InventColorId);

        contract.parmConfiguration(_inventDim.configId);

        contract.parmErrorList(_errorList);

        return contract;

    }


}


Helper Class :

class BASWorkLineDetailsHelper

{

    str         message;


    [AifCollectionTypeAttribute('return', Types::Class, classStr(BASWorkLineDetailsResponseContract))]

    public List getWorkOrderLineDetails(str _workId , str _dataAreaId)

    {

        str  workId          = _workId;

        str  dataAreaId      = _dataAreaId;

        List workOrderList   = new List(Types::Class);

        WHSWorkTable          workTable;

        WHSWorkLine           workLine;

        InventDim             inventDim;

        changecompany(dataAreaId)

        {

            List errorList = new List(Types::String);

            workTable = WHSWorkTable::find(workId);


            if (!workTable)

            {

                message = strFmt("Please enter a valid workId");

                errorList.addEnd(message);

                BASWorkLineDetailsResponseContract workOrderData = new BASWorkLineDetailsResponseContract();

                workOrderData = BASWorkLineDetailsResponseContract::newFromTableRecord(workLine,errorList,inventDim);

                workOrderList.addEnd(workOrderData);

            }

            else

            {

                Query query;

                QueryRun queryRun;

                QueryBuildDataSource queryBuildDataSource,queryBuildDataSource1;

                QueryBuildRange queryBuildRange;

                query = new Query();

                queryBuildDataSource = query.addDataSource(TableNum(WHSWorkLine));

                queryBuildDataSource1 = queryBuildDataSource.addDataSource(TableNum(InventDim));

                queryBuildDataSource1.relations(true);

                queryBuildRange = queryBuildDataSource.addRange(FieldNum(WHSWorkLine, WorkId));

                queryBuildRange.value(workId);

                queryRun = new QueryRun(query);

                while(queryRun.next())

                {

                    workLine = queryRun.get(tableNum(WHSWorkLine));

                    inventDim = queryRun.get(tableNum(InventDim));

                    BASWorkLineDetailsResponseContract workOrderData = new BASWorkLineDetailsResponseContract();

                    workOrderData = BASWorkLineDetailsResponseContract::newFromTableRecord(workLine,errorList,inventDim);

                    workOrderList.addEnd(workOrderData);

                }

            }

            return workOrderList;

        }


    }

}


Service Class :

 [AifCollectionTypeAttribute('return', Types::Class, classStr(BASWorkLineDetailsResponseContract))]

    public List WorkOrderLineDetails(BASWorkLineDetailsRequestContract _contract)

    {

        BASWorkLineDetailsHelper workLineDetails = new BASWorkLineDetailsHelper();

        str             workId         = _contract.parmworkId();

        str             dataAreaId     = _contract.parmdataAreaId();

        List            workOrderList  = new List(Types::Class);

        workOrderList = workLineDetails.getWorkOrderLineDetails(workId,dataAreaId);

        return workOrderList;

    }



Comments

Popular posts from this blog

how to post trade agreement journals automatically using x++ code

How to Create a wizard in x++ d365

x++ code to submit and approve and reject the invent movement workflow in d365 F&O