Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Ισχύει για: Λειτουργίες Έργου ενσωματωμένες με ERP, Βασικές Λειτουργίες Έργου.
Dynamics 365 Project Operations υποστηρίζει τη δυνατότητα αντιγραφής ενός έργου και επαναφοράς τυχόν αναθέσεων στους γενικούς πόρους που αντιπροσωπεύουν τον ρόλο. Χρησιμοποιήστε αυτήν τη λειτουργικότητα για να δημιουργήσετε βασικά πρότυπα έργων.
Όταν επιλέγετε Αντιγραφή έργου, το σύστημα ενημερώνει την κατάσταση του έργου προορισμού. Χρησιμοποιήστε την Αιτιολογία κατάστασης για να καθορίσετε το πότε ολοκληρώνεται η ενέργεια αντιγραφής. Εάν επιλέξετε Αντιγραφή έργου , ενημερώνεται επίσης η ημερομηνία έναρξης του έργου στην τρέχουσα ημερομηνία έναρξης, εάν το σύστημα δεν εντοπίζει μια ημερομηνία-στόχο στην οντότητα έργου προορισμού.
Για να προσθέσετε περισσότερες στήλες για αντιγραφή από την οντότητα Έργο, προσθέστε αυτές τις στήλες στην προβολή Αντιγραφή στηλών έργου στην οντότητα Έργο και, στη συνέχεια, εκτελέστε το API CopyProjectEntityAttributesRequest μέσω ενός πρόσθετου ή μιας ροής. Αυτό το API αντιγράφει τα δεδομένα στις στήλες της προβολής Αντιγραφή στηλών έργου από το καθορισμένο έργο προέλευσης στο έργο προορισμού. Πρέπει να καλέσετε αυτό το API ξεχωριστά από την κλήση CopyProjectV3 ή V4 API.
Για να προσθέσετε περισσότερες στήλες για αντιγραφή από τις οντότητες Project Task, προσθέστε αυτές τις στήλες στην προβολή Αντιγραφή στηλών εργασίας έργου στον πίνακα Project Task για να εξασφαλίσετε ότι οι στήλες αντιγράφονται στις νέες Project Tasks όταν καλείτε την CopyProjectV3 ή V4.
Προσαρμοσμένη ενέργεια αντιγραφής έργου v3
Πλήρες όνομα
msdyn_CopyProjectV3
Παράμετροι εισόδου
Υπάρχουν τρεις παράμετροι καταχώρισης:
ReplaceNamedResources ή ClearTeamsAndAssignments – Ορίστε μόνο μία από αυτές τις επιλογές. Μην ορίσετε και τις δύο.
- {"ReplaceNamedResources":true} – Η προεπιλεγμένη συμπεριφορά για Project Operations. Αντικαθιστά οποιουσδήποτε επώνυμους πόρους με γενικούς πόρους. Η μόνη εξαίρεση είναι οι αναθέσεις στον Διαχειριστή έργου στο έργο προέλευσης που εκχωρούνται στον Διαχειριστή έργου προορισμού (απαιτείται ένας ονοματισμένος πόρος και όχι ένας γενικός πόρος).
- {"ClearTeamsAndAssignments":true} – Η προεπιλεγμένη συμπεριφορά για το Project for the Web. Καταργεί όλες τις αναθέσεις και τα μέλη της ομάδας.
SourceProject - Η αναφορά οντότητας του έργου προέλευσης από το οποίο θα αντιγραφούν. Μην ορίσετε αυτή την παράμετρο σε null.
Target - Η αναφορά οντότητας του έργου στόχου στο οποίο θα αντιγραφούν. Μην ορίσετε αυτή την παράμετρο σε null.
Ο παρακάτω πίνακας παρέχει μια σύνοψη των τριών παραμέτρων.
| Παράμετρος | Τύπος | Τιμή |
|---|---|---|
| ReplaceNamedResources | Boolean | True ή False |
| ClearTeamsAndAssignments | Boolean | True ή False |
| SourceProject | Αναφορά οντότητας | Το έργο προέλευσης |
| Στόχος | Αναφορά οντότητας | Το έργο προορισμός |
Για περισσότερες προεπιλογές όσον αφορά ενέργειες δείτε Χρήση ενεργειών Web API.
Επικυρώσεις
Το σύστημα εκτελεί τις ακόλουθες επικυρώσεις:
Ελέγχει για τιμές null και ανακτά τα έργα προέλευσης και προορισμού για να επιβεβαιώσει ότι υπάρχουν και τα δύο έργα στον οργανισμό.
Επικυρώνει ότι το έργο προορισμού είναι έγκυρο για αντιγραφή επαληθεύοντας τις ακόλουθες συνθήκες:
- Το έργο είναι νέο και δεν έχει καμία προηγούμενη δραστηριότητα, συμπεριλαμβανομένης της επιλογής της καρτέλας Εργασίες .
- Το έργο δεν διαθέτει προηγούμενο αντίγραφο, δεν ζητήθηκε εισαγωγή σε αυτό το έργο και το έργο δεν έχει κατάσταση "Αποτυχία ".
Η λειτουργία δεν καλείται με χρήση του HTTP.
Προσαρμοσμένη ενέργεια αντιγραφής έργου v4
Πλήρες όνομα
msdyn_CopyProjectV4
Παράμετροι εισόδου
Χρησιμοποιήστε πέντε παραμέτρους εισόδου:
SourceProject - Η αναφορά οντότητας του έργου προέλευσης από το οποίο θα αντιγραφούν. Μην ορίσετε αυτή την παράμετρο σε null.
Target - Η αναφορά οντότητας του έργου στόχου στο οποίο θα αντιγραφούν. Μην ορίσετε αυτή την παράμετρο σε null.
TeamMemberOption – Η επιλογή για αντιγραφή μελών ομάδας στο έργο-στόχο. Μην ορίσετε αυτή την παράμετρο σε null.
- 0 – Μην αντιγράφετε μέλη ομάδας.
- 1 – Αντιγραφή μελών ομάδας ως γενικούς πόρους (συμπεριφέρεται όπως και στη V3).
- 2– - Αντιγραφή μελών ομάδας σε καθορισμένους πόρους με όνομα ή γενικούς πόρους.
Μέλη ομάδας – Η συλλογή οντοτήτων μελών της ομάδας με όνομα ή γενικά για την αντικατάσταση των υπαρχόντων μελών της ομάδας. Ορίστε αυτή την παράμετρο σε null εάν επιλέξετε 0 ή 1 για την παράμετρο TeamMemberOption . Μην ορίσετε αυτή την παράμετρο σε null εάν επιλέξετε 2.
TeamMembersMapping - Το λεξικό συμβολοσειράς Σημείωσης αντικειμένου JavaScript (JSON) που αντιστοιχίζει μέλη της ομάδας από το έργο προέλευσης στο έργο προορισμού. Για κάθε καταχώρηση, το κλειδί είναι η τιμή ProjectTeamID του μέλους της ομάδας έργου προέλευσης και η τιμή είναι η τιμή ProjectTeamID του μέλους της ομάδας έργου προορισμού. Όλες οι αναθέσεις στο έργο προέλευσης του αναγνωρισμένου μέλους της ομάδας έργου προέλευσης εκχωρούνται στο αναγνωρισμένο μέλος της ομάδας έργου προορισμού στο έργο προορισμού. Πολλά μέλη της ομάδας έργου προέλευσης μπορούν να αντιστοιχιστούν με ένα μέλος της ομάδας έργου προορισμού. Ορίστε αυτή την παράμετρο σε null εάν επιλέξετε 0 ή 1 για την παράμετρο TeamMemberOption . Είναι προαιρετικό εάν επιλέξετε 2.
Ο παρακάτω πίνακας παρέχει μια σύνοψη των πέντε παραμέτρων.
| Παράμετρος | Τύπος | Τιμή |
|---|---|---|
| SourceProject | Αναφορά οντότητας | Το έργο προέλευσης |
| Στόχος | Αναφορά οντότητας | Το έργο προορισμός |
| TeamMemberOption | Σύνολο επιλογών | 0, 1 ή 2 |
| TeamMembers | Συλλογή οντότητας | Επώνυμα ή γενικά μέλη ομάδας για το έργο προορισμού |
| TeamMembersMapping | Συμβολοσειρά Json | Το λεξικό που αντιστοιχίζει τα μέλη της ομάδας από το έργο προέλευσης στο έργο προορισμού |
Για περισσότερες προεπιλογές όσον αφορά ενέργειες δείτε Χρήση ενεργειών Web API.
Επικυρώσεις
Το σύστημα εκτελεί τις ακόλουθες επικυρώσεις:
Ελέγχει για τιμές null και ανακτά τα έργα προέλευσης και προορισμού για να επιβεβαιώσει ότι υπάρχουν και τα δύο έργα στον οργανισμό.
Επικυρώνει ότι όλα τα μέλη της ομάδας τόσο στην παράμετρο TeamMembers όσο και στην παράμετρο TeamMemberMapping είναι έγκυρα.
Επικυρώνει ότι το έργο προορισμού είναι έγκυρο για αντιγραφή επαληθεύοντας τις ακόλουθες συνθήκες:
- Το έργο είναι νέο και δεν έχει καμία προηγούμενη δραστηριότητα, συμπεριλαμβανομένης της επιλογής της καρτέλας Εργασίες .
- Το έργο δεν διαθέτει προηγούμενο αντίγραφο, δεν ζητήθηκε εισαγωγή σε αυτό το έργο και το έργο δεν έχει κατάσταση Αποτυχία .
Ελέγχει ότι η λειτουργία δεν καλείται χρησιμοποιώντας HTTP.
Καθορισμός πεδίων προς αντιγραφή
Όταν καλείτε την ενέργεια, η εντολή Αντιγραφή έργου ελέγχει την προβολή έργου Αντιγραφή στηλών έργου για να προσδιορίσει ποια πεδία θα αντιγράψετε κατά την αντιγραφή του έργου.
Παράδειγμα
Το παρακάτω παράδειγμα δείχνει τον τρόπο κλήσης της προσαρμοσμένης ενέργειας CopyProjectV3 με την παράμετρο removeNamedResources να έχει οριστεί.
{
using System;
using System.Runtime.Serialization;
using Microsoft.Xrm.Sdk;
using Newtonsoft.Json;
public class CopyProjectSample
{
private IOrganizationService organizationService;
public CopyProjectSample(IOrganizationService organizationService)
{
this.organizationService = organizationService;
}
public void SampleRun()
{
// Example source project GUID
Guid sourceProjectId = new Guid("11111111-1111-1111-1111-111111111111");
var sourceProject = new Entity("msdyn_project", sourceProjectId);
Entity targetProject = new Entity("msdyn_project");
targetProject["msdyn_subject"] = "Example Project - Copy";
targetProject.Id = organizationService.Create(targetProject);
CallCopyProjectAPI(sourceProject.ToEntityReference(), targetProject.ToEntityReference(), copyOption, true, false);
Console.WriteLine("Done ...");
}
private void CallCopyProjectAPI(EntityReference sourceProject, EntityReference TargetProject, bool replaceNamedResources = true, bool clearTeamsAndAssignments = false)
{
OrganizationRequest req = new OrganizationRequest("msdyn_CopyProjectV3");
req["SourceProject"] = sourceProject;
req["Target"] = TargetProject;
if (replaceNamedResources)
{
req["ReplaceNamedResources"] = true;
}
else
{
req["ClearTeamsAndAssignments"] = true;
}
OrganizationResponse response = organizationService.Execute(req);
}
}
}
Παράδειγμα
Το παρακάτω παράδειγμα δείχνει τον τρόπο κλήσης της προσαρμοσμένης ενέργειας CopyProjectV4 όπου η παράμετρος TeamMemberOption έχει οριστεί σε 2 και θα αποστέλλονται τόσο οι τιμές TeamMembers όσο και TeamMembersMapping.
/* To simplify, the sample code below does not contain code to setup source project, create target project, etc.
* The sample code demonstrates calling Copy Project V4 with option to pass in team members for creation and mapping.
*
* IN THE BELOW CODE EXAMPLE:
* sourceProjectRef is the EntityReference of the source project to copy.
* targetProjectRef is the target project, target project must be created before calling the API.
* Target project should be created empty without doing any further setup like adding team members, tasks, etc.
* toBeCreatedTargetTeamMembers is an EntityCollection of team members to be created in the target project
* as part of the copy and mapping.
* teamMembersMapping is a Dictionary<Guid, Guid> of the team member mapping between source and target project.
* Key is the ID of a source team member; Value is the ID of the target team member.
* */
var request = new OrganizationRequest("msdyn_CopyProjectV4");
request["Target"] = targetProjectRef;
request["SourceProject"] = sourceProjectRef;
request["TeamMemberOption"] = new OptionSetValue(2); // 0: None, 1: CopyAsGeneric, 2: Specify
request["TeamMembers"] = toBeCreatedTargetTeamMembers;
request["TeamMembersMapping"] = SerializeJson(teamMembersMapping); // See implementation of SerializeJson() method below
OrganizationService.Execute(request);
/* Sample serialized json for team member mapping:
'[
{"Key":"a2cee002-cca1-41a4-8821-09d8327741e9","Value":"32c55ac0-06d6-4809-bcdb-566635576e1e"},
{"Key":"b2cee002-cca1-41a4-8821-09d8327741e0","Value":"42c55ac0-06d6-4809-bcdb-566635576e10"},
]'
*/
string SerializeJson<T>(T obj)
{
var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
using (Stream stream = new MemoryStream())
{
serializer.WriteObject(stream, obj);
stream.Position = 0;
StreamReader streamReader = new StreamReader(stream);
return streamReader.ReadToEnd();
}
}
/* Optional code to wait for the copy to complete as the main work is done in Async service.
* To see details on error, go to PSS Error Logs and/or Settings > System Jobs.
* */
EnsureProjectCopySuccessful(targetProjectRef);
void EnsureProjectCopySuccessful(EntityReference project)
{
var start = DateTime.Now;
do
{
Thread.Sleep(TimeSpan.FromSeconds(10));
var updatedProject = OrganizationService.Retrieve(Project.EntityLogicalName, project.Id, new ColumnSet(Project.AttributeStatuscode))
.ToEntity<Project>();
if (updatedProject.statuscode.Value == (int)project_statuscode.Projectcopyfailed)
{
throw new Exception("Project Copy failed.");
}
else if (updatedProject.statuscode.Value == (int)project_statuscode.Active)
{
break;
}
if (DateTime.Now > start + TimeSpan.FromMinutes(5))
{
throw new TimeoutException("Copy Project timed out");
}
}
while (true);
}