Skip to Content
Product Information
Author's profile photo ANKIT CHAUHAN

“Project Management” object is exposed from SAP Business One Version 9.2 PL03

“Project Management” object is exposed as a Service Type Object from SAP Business One Version 9.2 PL03. It is yet to be implemented in DTW.

Here is how to use the Project Management object using DI API:

1. Add a Project using DI API:

int absEntryOfCreatedProject = -1;
SAPbobsCOM.CompanyService oCompServ = null;
SAPbobsCOM.ProjectManagementService pmgService = null;

try
{

    oCompServ = (SAPbobsCOM.CompanyService)oCompany.GetCompanyService();
    pmgService = (SAPbobsCOM.ProjectManagementService)oCompServ.GetBusinessService(SAPbobsCOM.ServiceTypes.ProjectManagementService);
    SAPbobsCOM.PM_ProjectDocumentData project = (SAPbobsCOM.PM_ProjectDocumentData)pmgService.GetDataInterface(SAPbobsCOM.ProjectManagementServiceDataInterfaces.pmsPM_ProjectDocumentData);
    project.ProjectName = "ProjectByDI_01";
    project.Owner = 1;
    project.StartDate = new DateTime(2016, 2, 1);
    project.DueDate = new DateTime(2016, 11, 30);
    project.ClosingDate = new DateTime(2016, 12, 31);
    project.ProjectType = SAPbobsCOM.ProjectTypeEnum.pt_External;
    project.BusinessPartner = "C20000";
    project.ContactPerson = 2;
    project.Territory = 1;
    project.SalesEmployee = 5;
    project.AllowSubprojects = SAPbobsCOM.BoYesNoEnum.tYES;
    project.ProjectStatus = SAPbobsCOM.ProjectStatusTypeEnum.pst_Started;
    project.FinancialProject = "PRJ01";
    project.RiskLevel = SAPbobsCOM.RiskLevelTypeEnum.rlt_High;
    project.Industry = 1;
    project.Reason = "Test comment";
    project.AttachmentEntry = 1;
    SAPbobsCOM.PM_ProjectDocumentParams projectParam = pmgService.AddProject(project);
    absEntryOfCreatedProject = projectParam.AbsEntry;

}

catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

finally
{
    if (pmgService != null)
    {
        MessageBox.Show(absEntryOfCreatedProject.ToString());
        System.Runtime.InteropServices.Marshal.ReleaseComObject(pmgService);
    }
}

2. Update a Project by adding ‘Documents’ to ‘Stages’ using DI API:

SAPbobsCOM.CompanyService oCompServ = (SAPbobsCOM.CompanyService)oCompany.GetCompanyService();
SAPbobsCOM.ProjectManagementService pmgService = (SAPbobsCOM.ProjectManagementService)oCompServ.GetBusinessService(SAPbobsCOM.ServiceTypes.ProjectManagementService);
SAPbobsCOM.PM_ProjectDocumentParams projectToUpdateParam = pmgService.GetDataInterface(SAPbobsCOM.ProjectManagementServiceDataInterfaces.pmsPM_ProjectDocumentParams);

try
{
    projectToUpdateParam.AbsEntry = 1;
    SAPbobsCOM.PM_ProjectDocumentData project = pmgService.GetProject(projectToUpdateParam);
    SAPbobsCOM.PM_StagesCollection stagesCollection = project.PM_StagesCollection;
    SAPbobsCOM.PM_StageData stage = stagesCollection.Add();
    stage.StageType = 1;
    stage.StartDate = DateTime.Now;
    stage.CloseDate = stage.StartDate.AddDays(30);
    stage.Task = 1;
    stage.Description = "StageWithDocByDI_01";
    stage.ExpectedCosts = 150;
    stage.PercentualCompletness = 7;
    stage.IsFinished = SAPbobsCOM.BoYesNoEnum.tNO;
    stage.StageOwner = 5;
    stage.AttachmentEntry = 1;
    stage = stagesCollection.Add();
    stage.StageType = 2;
    stage.StartDate = DateTime.Now.AddMonths(1);
    stage.CloseDate = stage.StartDate.AddDays(30);
    stage.Task = 2;
    stage.Description = "StageWithDocByDI_02";
    stage.ExpectedCosts = 250;
    stage.PercentualCompletness = 8;
    stage.IsFinished = SAPbobsCOM.BoYesNoEnum.tNO;
    stage.StageOwner = 5;
    stage.DependsOnStage1 = 1;
    stage.StageDependency1Type = SAPbobsCOM.StageDepTypeEnum.sdt_Project;
    stage.DependsOnStageID1 = 1;

    SAPbobsCOM.PM_DocumentsCollection documentsCollection = project.PM_DocumentsCollection;
    SAPbobsCOM.PM_DocumentData document = documentsCollection.Add();
    document.StageID = 1;
    document.DocType = SAPbobsCOM.PMDocumentTypeEnum.pmdt_APCreditMemo;
    document.DocEntry = 7;
    pmgService.UpdateProject(project);
    MessageBox.Show("OK");
}

catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

finally
{
    if (pmgService != null)
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(pmgService);
    }
}

3. Cancelling a Project using DI API:

SAPbobsCOM.CompanyService oCompServ = null;
SAPbobsCOM.ProjectManagementService pmgService = null;

try
{
    oCompServ = (SAPbobsCOM.CompanyService)oCompany.GetCompanyService();
    pmgService = (SAPbobsCOM.ProjectManagementService)oCompServ.GetBusinessService(ServiceTypes.ProjectManagementService);
    SAPbobsCOM.PM_ProjectDocumentParams projectToCancelParam = pmgService.GetDataInterface(ProjectManagementServiceDataInterfaces.pmsPM_ProjectDocumentParams);
    projectToCancelParam.AbsEntry = 1;
    pmgService.CancelProject(projectToCancelParam);
}
catch (Exception ex)
{
    throw new Exception(string.Format("Call PMG failed with error code: {0}", ex.Message));
}
finally
{
    if (pmgService != null)
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(pmgService);
    }
}

4. Adding a SubProject using DI API:

try
{
    CompanyService oCompServ = (SAPbobsCOM.CompanyService)oCompany.GetCompanyService();
    ProjectManagementService phaService = (SAPbobsCOM.ProjectManagementService)oCompServ.GetBusinessService(ServiceTypes.ProjectManagementService);
    PM_SubprojectDocumentData subProject = phaService.GetDataInterface(ProjectManagementServiceDataInterfaces.pmsPM_SubprojectDocumentData);
    subProject.Owner = 4;
    subProject.SubprojectName = "SubProjectNameByDI_01_01";
    subProject.StartDate = new DateTime(2016, 5, 1);
    subProject.DueDate = new DateTime(2016, 5, 15);
    subProject.SubprojectEndDate = new DateTime(2016, 5, 31);
    subProject.ProjectID = 1;
    subProject.SubprojectType = 1;
    subProject.SubprojectContribution = 15;
    subProject.SubprojectStatus = SubprojectStatusTypeEnum.sst_Open;
    subProject.ActualCost = 50;
    subProject.PlannedCost = 200;
    SAPbobsCOM.PM_SubprojectDocumentParams subprojectParam = phaService.AddSubproject(subProject);
}
catch (Exception ex)
{
    throw new Exception(string.Format("Call failed with error code: {0}", ex.Message));
}
finally
{
    if (pmgService != null)
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(pmgService);
    }
}

5. Updating a SubProject by adding Stages to it using DI API:

SAPbobsCOM.ProjectManagementService oProject = oCompany.GetCompanyService().GetBusinessService(SAPbobsCOM.ServiceTypes.ProjectManagementService);
SAPbobsCOM.PM_SubprojectDocumentData subProject1 = oProject.GetDataInterface(SAPbobsCOM.ProjectManagementServiceDataInterfaces.pmsPM_SubprojectDocumentData);
SAPbobsCOM.PM_SubprojectDocumentParams subProjectParam1 = oProject.GetDataInterface(SAPbobsCOM.ProjectManagementServiceDataInterfaces.pmsPM_SubprojectDocumentParams);
subProjectParam1.AbsEntry = 1;  //OPHA.AbsEntry
subProject1 = oProject.GetSubproject(subProjectParam1);
SAPbobsCOM.PMS_StagesCollection stagesCollection= subProject1.PMS_StagesCollection;
SAPbobsCOM.PMS_StageData stage = stagesCollection.Add();
stage.StageType = 3;  //PMC2.StageID
stage.StartDate = DateTime.Today.Date;
stage.Description = "My DI Test";
oProject.UpdateSubproject(subProject1);

Update: UDFs have been implemented for “PM_ProjectDocumentData”, “PM_StageData”, “PM_SubprojectDocumentData” since SAP Business One Version 9.3 PL01 .

Assigned Tags

      24 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Kuldeep Kumar
      Kuldeep Kumar

      Thanks for sharing this... When we can use it in DTW?

      Author's profile photo Former Member
      Former Member

      Dear Kuldeep, we are well aware of this requirement, it is also tracked via https://ideas.sap.com/D35622.

      Please subscribe to that idea in order to get informed as soon as it get updated.

      Best regards, Peter

      Author's profile photo Former Member
      Former Member

      Delivered with SAP Business One 9.3 PL00

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Update an existing ‘Stage’ for the existing Project Management Document, can be found here:

       

      https://answers.sap.com/questions/160076/sap-business-one-project-management-stages-sdk.html

       

      Kind regards,

      ANKIT CHAUHAN

      SAP SME Support

      Author's profile photo Former Member
      Former Member

      Hi Ankit,

      Thanks for sharing.

      Is it possible to update UDF values for PM_ProjectDocumentData or PM_SubprojectDocumentData?

      Thanks,
      Mark

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Hi Former Member,

      Currently, I do not find any possibility to do this. I will inform you about it as early as possible.

      Kind regards,

      ANKIT CHAUHAN

      SAP SME Support

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Hi Former Member,

      Currently, UDFs are not implemented for PM_ProjectDocumentData or PM_SubprojectDocumentData

       

      Kind regards,

      ANKIT CHAUHAN

      SAP SME Support

       

      Author's profile photo Ngoc Nguyen Thanh
      Ngoc Nguyen Thanh

      Hi ANKIT CHAUHAN,
      Can you help give me demo adding Project management with DI API. I dont know how to use DI API with Project Management
      Thanks.

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Hi,

      Sorry for the late reply!

      To use the above mentioned program, you need to perform the following:

      1. Create a company connection using DI API. For this, if you need a help, you need to install SAP Business One SDK and find the sample codes at the following location:C:\Program Files (x86)\SAP\SAP Business One SDK\Samples
      2. Once the company connection is successful, you can use the above mentioned program as it is and notice what is being done by DI API. This can be observed from SAP Business One Client itself.

      Hope it helps!

      Kind regards,

      ANKIT CHAUHAN

      SAP SME Support

      Author's profile photo Ngoc Nguyen Thanh
      Ngoc Nguyen Thanh

      Hi ANKIT,
      Thank you so much
      With sharing this, Can I use DI API import with file XML. Pls explain for me
      Thanks

      Author's profile photo Mark van der Steen
      Mark van der Steen

      Hi,

       

      Can you also give some examples for ProjectManagementConfigurationService.

      Specialy the getTasks and addTasks?

       

      Kind regards,

       

      Mark

       

      Author's profile photo Tulio Enterlein
      Tulio Enterlein

      Hi Ankit!

      Firstly, thanks for your post and samples about Project Management. However, I have doubt about how to implement UDF in this code.

      After installing SAP 9.3 PL5, I'm trying to integrate Project Management basead on your sample and update UDF, but an error is shown on my application:

      Invalid Field Name

      The line which is occuring the error:

      project.UserFields.Item("U_ValorProj").Value = 5.0;

      The field "U_ValorProj" was created correcly in Project Management as Numeric (16.9), but I have no idea how to fix it.

      Besides that, I changed the field name to "ValorProj" but the error persists:

      project.UserFields.Item("ValorProj").Value = 5.0;

      Could you help me?

      Best Regards

      Tulio

       

      Author's profile photo Andres Ramirez Jaramillo
      Andres Ramirez Jaramillo

      Hi ANKIT CHAUHAN 
      I need to use the PurchaseRequest object (1470000113), but it is not available in the PMDocumentTypeEnum
      Thanks for any help

      Andres Ramirez Jaramillo

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Hi Andres Ramirez Jaramillo,

      Kindly help to test the issue in SAP Business One Version 9.3 PL13 or above. This issue appears to be fixed in SAP Business One Version 9.3 PL13 as mentioned in SAP Note 2860252.

      Kind regards,

      ANKIT CHAUHAN

      SAP Business One Support

      Author's profile photo Marcin Kruszczak
      Marcin Kruszczak

      Greetings Ankit,

       

      do you have any code samples on how to add/update subproject stages? (I mean – the OPHA ones)

      … or you how to update the code provided by SAP?

       

      tbh I’m a bit lost, im just trying to add new stages.

      Thanks in advance for any help!

      Author's profile photo Rurangwa Schadrack
      Rurangwa Schadrack

      Hi all,

      What is the Project Type value in PHP or Java

      In above example there is below code line

      project.ProjectType = SAPbobsCOM.ProjectTypeEnum.pt_External;

      I need to know in PHP or Java what I can replace with the following code

      SAPbobsCOM.ProjectTypeEnum.pt_External;

      Thank you

       

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Hi Rurangwa Schadrack,

      pt_External is supposed to have the value as 0 while pt_Internal as 1.

      Hope it helps!

      Kind regards,

      ANKIT CHAUHAN

      SAP Business One Support

      Author's profile photo Rurangwa Schadrack
      Rurangwa Schadrack

      It was done! Thank you so much

      Author's profile photo Tiziana Fergi
      Tiziana Fergi

      I am working with postman and I am using ProjectManagementService from Service Layer API Reference. https://sap-samples.github.io/smb-summit-hackathon/b1sl.html

      I need to update a subproject in particular an element of PMS_StagesCollection.

      if "PMS_DocumentsCollection" is empty I update PMS_StagesCollection

      with POST ProjectManagementService_UpdateSubproject

      My problem is:

      if "PMS_DocumentsCollection" is not empty I receive this error

      "StageID is invalid. [PHA4.StageID][line: 1]"

       

      can someone help me?

       

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Dear Tiziana Fergi,

      We are already checking/discussing this issue with our Development Team.

      If you would like to follow up, kindly create an incident under the component SBO-SDK-SVL.

      Kind regards,

      ANKIT CHAUHAN

      SAP Business One Support

      Author's profile photo Tiziana Fergi
      Tiziana Fergi

      many thanks

      Author's profile photo Tiziana Fergi
      Tiziana Fergi

      Can I ask the link where can I create an incident under the component SBO-SDK-SVL?

      Author's profile photo ANKIT CHAUHAN
      ANKIT CHAUHAN
      Blog Post Author

      Dear Tiziana Fergi,

      Apologies for the late reply.

      You need to create an incident using SAP Business One Support Launchpad. To create an incident, you need a valid S-User ID.

      Your SAP Business One Partner should help you will all this.

      Kind regards,

      ANKIT CHAUHAN

      SAP Business One Support

      Author's profile photo Andrey Petrenko
      Andrey Petrenko

      Hi all,
      I need to update the "Branch" field of the Project. And it seems there is no Branch/BPLid property in PM_ProjectDocumentData. Is it possible to update this field via DIAPI?

      Thanks in advance for any help!