Skip to main content

Actions

The ballerinax/microsoft.dynamics365.finance.project package exposes the following clients:

ClientPurpose
ClientProvides CRUD access to Microsoft Dynamics 365 Finance and Operations project entities via the OData REST API.

Client

Provides CRUD access to Microsoft Dynamics 365 Finance and Operations project entities via the OData REST API.

Configuration

FieldTypeDefaultDescription
authOAuth2ClientCredentialsGrantConfigRequiredOAuth 2.0 client credentials grant configuration (tokenUrl, clientId, clientSecret, scopes) used to authenticate with Microsoft Entra ID.
httpVersionhttp:HttpVersion"2.0"HTTP protocol version to use for outbound requests.
http1Settingshttp:ClientHttp1Settings{}HTTP/1.x client settings including keep-alive, chunking, and proxy configuration.
secureSockethttp:ClientSecureSocket()SSL/TLS configuration for secure connections.
proxyhttp:ProxyConfig()Proxy server configuration.

Initializing the client

import ballerinax/microsoft.dynamics365.finance.project;

configurable string tokenUrl = ?;
configurable string clientId = ?;
configurable string clientSecret = ?;
configurable string serviceUrl = ?;

project:Client fo = check new (
{
auth: {
tokenUrl,
clientId,
clientSecret
}
},
serviceUrl
);

Operations

CDS Projects

listCDSProjects

Lists CDS project records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListCDSProjectsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: CDSProjectsCollection|error

Sample code:

project:CDSProjectsCollection result = check fo->listCDSProjects(
queries = {
filter: "ProjectType eq 'TimeMaterial'",
top: 20,
'select: "ProjectID,ProjectName,CustomerAccount"
}
);
createCDSProjects

Creates a CDS project record.

Parameters:

NameTypeRequiredDescription
payloadCDSProjectYesCDS project fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: CDSProject|error

Sample code:

project:CDSProject created = check fo->createCDSProjects({
dataAreaId: "usmf",
projectID: "CDS-1001",
projectName: "Warehouse Expansion",
customerAccount: "CUST-4021",
projectType: "TimeMaterial",
startDate: "2026-09-01"
});
getCDSProjects

Gets a CDS project record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetCDSProjectsQueriesNoQuery parameters: expand, 'select.

Returns: CDSProject|error

Sample code:

project:CDSProject cdsProject = check fo->getCDSProjects("usmf", "CDS-1001");
deleteCDSProjects

Deletes a CDS project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersDeleteCDSProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteCDSProjects("usmf", "CDS-1001");
updateCDSProjects

Updates a CDS project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
payloadCDSProjectYesFields to update.
headersUpdateCDSProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: CDSProject|error

Sample code:

project:CDSProject updated = check fo->updateCDSProjects(
"usmf",
"CDS-1001",
{description: "Warehouse Expansion - Phase 2"}
);

PSA Actuals

listPSAActuals

Lists posted project actual transactions.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListPSAActualsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: PSAActualsCollection|error

Sample code:

project:PSAActualsCollection result = check fo->listPSAActuals(
queries = {
filter: "ProjId eq 'PROJ-100'",
top: 50
}
);
createPSAActuals

Creates a project actual transaction record.

Parameters:

NameTypeRequiredDescription
payloadPSAActualYesProject actual transaction fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: PSAActual|error

Sample code:

project:PSAActual created = check fo->createPSAActuals({
dataAreaId: "usmf",
projId: "PROJ-100",
transId: "TRX-9001",
categoryId: "CONSULT",
projTransType: "Hour",
qty: 8,
amountMst: 640.00d
});
getPSAActuals

Gets a project actual transaction record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetPSAActualsQueriesNoQuery parameters: expand, 'select.

Returns: PSAActual|error

Sample code:

project:PSAActual actual = check fo->getPSAActuals("usmf", "TRX-9001");
deletePSAActuals

Deletes a project actual transaction record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersDeletePSAActualsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deletePSAActuals("usmf", "TRX-9001");
updatePSAActuals

Updates a project actual transaction record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
payloadPSAActualYesFields to update.
headersUpdatePSAActualsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: PSAActual|error

Sample code:

project:PSAActual updated = check fo->updatePSAActuals(
"usmf",
"TRX-9001",
{qty: 7.5d}
);

PSA Forecasts

listPSAForecasts

Lists forecasted project amounts.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListPSAForecastsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: PSAForecastsCollection|error

Sample code:

project:PSAForecastsCollection result = check fo->listPSAForecasts(
queries = {
filter: "ProjId eq 'PROJ-100'"
}
);
createPSAForecasts

Creates a project forecast record.

Parameters:

NameTypeRequiredDescription
payloadPSAForecastYesProject forecast fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: PSAForecast|error

Sample code:

project:PSAForecast created = check fo->createPSAForecasts({
dataAreaId: "usmf",
projId: "PROJ-100",
transId: "FCST-2001",
categoryId: "CONSULT",
projType: "TimeMaterial",
qty: 40,
amountMst: 3200.00d
});
getPSAForecasts

Gets a project forecast record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetPSAForecastsQueriesNoQuery parameters: expand, 'select.

Returns: PSAForecast|error

Sample code:

project:PSAForecast forecast = check fo->getPSAForecasts("usmf", "FCST-2001");
deletePSAForecasts

Deletes a project forecast record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
headersDeletePSAForecastsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deletePSAForecasts("usmf", "FCST-2001");
updatePSAForecasts

Updates a project forecast record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
transIdstringYesThe trans ID key field.
payloadPSAForecastYesFields to update.
headersUpdatePSAForecastsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: PSAForecast|error

Sample code:

project:PSAForecast updated = check fo->updatePSAForecasts(
"usmf",
"FCST-2001",
{qty: 45}
);

Proj Grants

listProjGrants

Lists project grant records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjGrantsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjGrantsCollection|error

Sample code:

project:ProjGrantsCollection result = check fo->listProjGrants(
queries = {
filter: "GrantStatus eq 'Active'"
}
);
createProjGrants

Creates a project grant record.

Parameters:

NameTypeRequiredDescription
payloadProjGrantYesProject grant fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjGrant|error

Sample code:

project:ProjGrant created = check fo->createProjGrants({
dataAreaId: "usmf",
grantId: "GRANT-500",
grantName: "Community Infrastructure Grant",
custAccount: "CUST-4021",
grantStatus: "Submitted",
matchingPercentage: 20.0d
});
getProjGrants

Gets a project grant record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjGrantsQueriesNoQuery parameters: expand, 'select.

Returns: ProjGrant|error

Sample code:

project:ProjGrant grant = check fo->getProjGrants("usmf", "GRANT-500");
deleteProjGrants

Deletes a project grant record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersDeleteProjGrantsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjGrants("usmf", "GRANT-500");
updateProjGrants

Updates a project grant record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
payloadProjGrantYesFields to update.
headersUpdateProjGrantsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjGrant|error

Sample code:

project:ProjGrant updated = check fo->updateProjGrants(
"usmf",
"GRANT-500",
{grantStatus: "Approved"}
);

Proj Grants V2

listProjGrantsV2

Lists project grant records (V2).

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjGrantsV2QueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjGrantsV2Collection|error

Sample code:

project:ProjGrantsV2Collection result = check fo->listProjGrantsV2(
queries = {
filter: "GrantStatus eq 'Awarded'",
top: 10
}
);
createProjGrantsV2

Creates a project grant record (V2).

Parameters:

NameTypeRequiredDescription
payloadProjGrantV2YesProject grant fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjGrantV2|error

Sample code:

project:ProjGrantV2 created = check fo->createProjGrantsV2({
dataAreaId: "usmf",
grantId: "GRANT-V2-500",
grantName: "Rural Broadband Grant",
custAccount: "CUST-4021",
grantorAgency: "State Development Fund",
requestedAmount: 150000.00d,
matchingAmount: 30000.00d
});
getProjGrantsV2

Gets a project grant record (V2) by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjGrantsV2QueriesNoQuery parameters: expand, 'select.

Returns: ProjGrantV2|error

Sample code:

project:ProjGrantV2 grant = check fo->getProjGrantsV2("usmf", "GRANT-V2-500");
deleteProjGrantsV2

Deletes a project grant record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
headersDeleteProjGrantsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjGrantsV2("usmf", "GRANT-V2-500");
updateProjGrantsV2

Updates a project grant record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
grantIdstringYesThe grant ID key field.
payloadProjGrantV2YesFields to update.
headersUpdateProjGrantsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjGrantV2|error

Sample code:

project:ProjGrantV2 updated = check fo->updateProjGrantsV2(
"usmf",
"GRANT-V2-500",
{grantStatus: "Awarded"}
);

Project Groups

listProjectGroups

Lists project group records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectGroupsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectGroupsCollection|error

Sample code:

project:ProjectGroupsCollection result = check fo->listProjectGroups(
queries = {
filter: "ProjectType eq 'TimeMaterial'"
}
);
createProjectGroups

Creates a project group record.

Parameters:

NameTypeRequiredDescription
payloadProjectGroupYesProject group fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectGroup|error

Sample code:

project:ProjectGroup created = check fo->createProjectGroups({
dataAreaId: "usmf",
projectGroup: "TM-CONSULT",
name: "Time and Material Consulting",
projectType: "TimeMaterial",
postCostsHour: "Operations"
});
getProjectGroups

Gets a project group record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectGroupstringYesThe project group key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectGroupsQueriesNoQuery parameters: expand, 'select.

Returns: ProjectGroup|error

Sample code:

project:ProjectGroup group = check fo->getProjectGroups("usmf", "TM-CONSULT");
deleteProjectGroups

Deletes a project group record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectGroupstringYesThe project group key field.
headersDeleteProjectGroupsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectGroups("usmf", "TM-CONSULT");
updateProjectGroups

Updates a project group record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectGroupstringYesThe project group key field.
payloadProjectGroupYesFields to update.
headersUpdateProjectGroupsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectGroup|error

Sample code:

project:ProjectGroup updated = check fo->updateProjectGroups(
"usmf",
"TM-CONSULT",
{name: "Time and Material Consulting - Revised"}
);

Project Stages

listProjectStages

Lists project stage records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectStagesQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectStagesCollection|error

Sample code:

project:ProjectStagesCollection result = check fo->listProjectStages(
queries = {
filter: "Status eq 'InProcess'"
}
);
createProjectStages

Creates a project stage record.

Parameters:

NameTypeRequiredDescription
payloadProjectStageYesProject stage fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectStage|error

Sample code:

project:ProjectStage created = check fo->createProjectStages({
dataAreaId: "usmf",
language: "en-us",
status: "InProcess",
stage: "Execution"
});
getProjectStages

Gets a project stage record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
languagestringYesThe language key field.
statusstringYesThe status key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectStagesQueriesNoQuery parameters: expand, 'select.

Returns: ProjectStage|error

Sample code:

project:ProjectStage stage = check fo->getProjectStages("usmf", "en-us", "InProcess");
deleteProjectStages

Deletes a project stage record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
languagestringYesThe language key field.
statusstringYesThe status key field.
headersDeleteProjectStagesHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectStages("usmf", "en-us", "InProcess");
updateProjectStages

Updates a project stage record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
languagestringYesThe language key field.
statusstringYesThe status key field.
payloadProjectStageYesFields to update.
headersUpdateProjectStagesHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectStage|error

Sample code:

project:ProjectStage updated = check fo->updateProjectStages(
"usmf",
"en-us",
"InProcess",
{stage: "Execution - Milestone 2"}
);

Project Tasks

listProjectTasks

Lists project task records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectTasksQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectTasksCollection|error

Sample code:

project:ProjectTasksCollection result = check fo->listProjectTasks(
queries = {
filter: "ProjectId eq 'PROJ-100'",
orderby: "TaskDisplaySequence"
}
);
createProjectTasks

Creates a project task record.

Parameters:

NameTypeRequiredDescription
payloadProjectTaskYesProject task fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectTask|error

Sample code:

project:ProjectTask created = check fo->createProjectTasks({
dataAreaId: "usmf",
projectId: "PROJ-100",
taskId: "TASK-010",
taskName: "Site survey",
taskOutlineLevel: 1,
taskDisplaySequence: 10
});
getProjectTasks

Gets a project task record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
taskIdstringYesThe task ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectTasksQueriesNoQuery parameters: expand, 'select.

Returns: ProjectTask|error

Sample code:

project:ProjectTask task = check fo->getProjectTasks("usmf", "PROJ-100", "TASK-010");
deleteProjectTasks

Deletes a project task record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
taskIdstringYesThe task ID key field.
headersDeleteProjectTasksHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectTasks("usmf", "PROJ-100", "TASK-010");
updateProjectTasks

Updates a project task record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
taskIdstringYesThe task ID key field.
payloadProjectTaskYesFields to update.
headersUpdateProjectTasksHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectTask|error

Sample code:

project:ProjectTask updated = check fo->updateProjectTasks(
"usmf",
"PROJ-100",
"TASK-010",
{taskName: "Site survey and inspection"}
);

Projects

listProjects

Lists project records.

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectsQueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectsCollection|error

Sample code:

project:ProjectsCollection result = check fo->listProjects(
queries = {
filter: "ProjectGroup eq 'TM-CONSULT'",
top: 25,
'select: "ProjectID,ProjectName,Status,CustomerAccount"
}
);
createProjects

Creates a project record.

Parameters:

NameTypeRequiredDescription
payloadProjectYesProject fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: Project|error

Sample code:

project:Project created = check fo->createProjects({
dataAreaId: "usmf",
projectID: "PROJ-100",
projectName: "Client Portal Upgrade",
projectGroup: "TM-CONSULT",
projectType: "TimeMaterial",
customerAccount: "CUST-4021",
startDate1: "2026-09-01"
});
getProjects

Gets a project record by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectsQueriesNoQuery parameters: expand, 'select.

Returns: Project|error

Sample code:

project:Project proj = check fo->getProjects("usmf", "PROJ-100");
deleteProjects

Deletes a project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
headersDeleteProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjects("usmf", "PROJ-100");
updateProjects

Updates a project record.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIDstringYesThe project ID key field.
payloadProjectYesFields to update.
headersUpdateProjectsHeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: Project|error

Sample code:

project:Project updated = check fo->updateProjects(
"usmf",
"PROJ-100",
{status: "InProcess"}
);

Projects V2

listProjectsV2

Lists project records (V2).

Parameters:

NameTypeRequiredDescription
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesListProjectsV2QueriesNoQuery parameters: skip, top, filter, orderby, expand, crossCompany, count, 'select.

Returns: ProjectsV2Collection|error

Sample code:

project:ProjectsV2Collection result = check fo->listProjectsV2(
queries = {
filter: "ProjectGroupId eq 'TM-CONSULT'",
top: 25
}
);
createProjectsV2

Creates a project record (V2).

Parameters:

NameTypeRequiredDescription
payloadProjectV2YesProject fields to create.
headersmap<string|string[]>NoAdditional HTTP request headers.

Returns: ProjectV2|error

Sample code:

project:ProjectV2 created = check fo->createProjectsV2({
dataAreaId: "usmf",
projectId: "PROJ-200",
projectName: "Data Center Migration",
projectGroupId: "TM-CONSULT",
customerAccountNumber: "CUST-4021",
scheduleStartDate: "2026-10-01"
});
getProjectsV2

Gets a project record (V2) by its key.

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
headersmap<string|string[]>NoAdditional HTTP request headers.
queriesGetProjectsV2QueriesNoQuery parameters: expand, 'select.

Returns: ProjectV2|error

Sample code:

project:ProjectV2 proj = check fo->getProjectsV2("usmf", "PROJ-200");
deleteProjectsV2

Deletes a project record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
headersDeleteProjectsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: error?

Sample code:

check fo->deleteProjectsV2("usmf", "PROJ-200");
updateProjectsV2

Updates a project record (V2).

Parameters:

NameTypeRequiredDescription
dataAreaIdstringYesThe company data area identifier.
projectIdstringYesThe project ID key field.
payloadProjectV2YesFields to update.
headersUpdateProjectsV2HeadersNoOptional ifMatch ETag header, sent as If-Match.

Returns: ProjectV2|error

Sample code:

project:ProjectV2 updated = check fo->updateProjectsV2(
"usmf",
"PROJ-200",
{scheduleEndDate: "2027-03-31"}
);