Description du menu 'Héritage de champs' du client Process Studio
La partie Héritage de champ permet de créer le code de base pour créer un document de type B à partir d'un document de type A.
1. Héritage
Il peut s'agir d'une correspondance simple de champs.
Exemple :

Dans cet exemple, un nouvelle table de correspondance a été créée. Les champs du formulaire père (Fiche SMS) sont mis en correspondance avec les champs du formulaire cible (Fiche action).
Pour ajouter une correspondance supplémentaire, sélectionner un champ du formulaire père (à gauche) puis un champ du formulaire cible (à droite).
Pour ajouter, la correspondance, utiliser le bouton approprié
Une ligne de code est alors ajoutée dans la page.
Le code généré peut aussi être complété.
Exemple 1 : lancement du document généré dans son workflow Ajouter la portion de code suivante, avant la ligne //END_CODE_INHERITANCE
((Avanteam.Documents.DocumentDocHelper)docTarget).SaveDocument();
new Avanteam.Application.WorkflowClientRuntime(
new Avanteam.Application.DataSource.ApplicationDataSource {
UserName = Avanteam.Application.Security.APSUser.GetUserFromSession().FullName,
CurrentIdDocument = docTarget.IdDocument
})
.StartProcessByName( "NOM_DU_WORKFLOW_A_METTRE_ICI" );
Page.Response.Redirect( Page.ResolveUrl("~/PageLoader.ashx?Edit&IdDoc=" + docTarget.IdDocument + "&ext=1&tabkey=" + Page.Request.QueryString[ "tabkey" ].Split( ',' )[0] ), true);
Exemple 2 : recopie de lignes de détails
<%@ Control Language="C#" ClassName="Courrier_Entrant____________________Courrier_Sortant____________________" %>
<script runat="server">
public void RunInheritanceFields(Avanteam.Documents.Interface.IApsDocument docSource, Avanteam.Documents.Interface.IApsDocument docTarget)
{
//START_CODE_INHERITANCE
//docTarget.SetValues("Title", docSource.GetStringValue("Title", "{0} (H?ritage)"));
docTarget.SetValues("Title", docSource.GetValues("Title"));
docTarget.SetValues("ParentId", docSource.IdDocument);
docTarget.SetValues("ParentReference", docSource.GetValues("Reference"));
docTarget.SetValues("NatureCourrier", docSource.GetValues("NatureCourrier"));
docTarget.SetValues("IdEmetteur", docSource.GetValues("IdEmetteur"));
docTarget.SetValues("DateCourrierArrivee", docSource.GetValues("Date_Arrivee"));
Avanteam.Documents.DataSource.DocumentManagerWrapper docMng = ((Avanteam.Documents.DocumentDocHelper)docSource).DocumentDataSource;
// Cas GGeneral
// int fromSection = 1; //AffectPeople1
// int toSection = 2; //AffectPeople2
// string sqlInsertAffectPeople = string.Format("INSERT INTO AffectPeoples SELECT newid() as id, @IdNewDoc as id_document, {1} as section,from_name,from_date,from_service,from_job_title,from_comments,to_name,to_read_date,to_service,to_job_title,to_comments FROM AffectPeoples WHERE section={0} and id_document=@IdDoc", fromSection, toSection);
//docMng.SQL_ExecuteNonQuery(sqlInsertAffectPeople, new Avanteam.Kernel.KeyPair("@IdDoc", docSource.IdDocument), new Avanteam.Kernel.KeyPair("@IdNewDoc", docTarget.IdDocument));
if ( docMng != null ) {
int toSection = 3 ; //AffectPeople3 utilise dans les courriers sortant de cette base
//string sqlInsertAffectPeople = string.Format("INSERT INTO AffectPeoples SELECT newid() as id, @IdNewDoc as id_document, {0} as section,from_name,from_date,from_service,from_job_title,from_comments,to_name,to_read_date,to_service,to_job_title,to_comments FROM AffectPeoples WHERE id_document=@IdDoc", toSection);
string sqlInsertAffectPeople = "INSERT INTO AffectPeoples SELECT newid() as id, @IdNewDoc as id_document, 3 as section,from_name,getdate(),from_service,from_job_title,'',to_name,NULL,to_service,to_job_title,'' FROM AffectPeoples WHERE id_document=@IdDoc";
docMng.SQL_ExecuteNonQuery(sqlInsertAffectPeople, new Avanteam.Kernel.KeyPair("IdDoc", docSource.IdDocument), new Avanteam.Kernel.KeyPair("IdNewDoc", docTarget.IdDocument));
string sqlInsertEmetteurs = "INSERT INTO Emetteurs SELECT newid()as id , @IdNewDoc as id_document, Company, Nom , Prenom, Adresse, CodePostal, Ville, id_contact from Emetteurs WHERE id_document=@IdDoc";
docMng.SQL_ExecuteNonQuery(sqlInsertEmetteurs, new Avanteam.Kernel.KeyPair("IdDoc", docSource.IdDocument), new Avanteam.Kernel.KeyPair("IdNewDoc", docTarget.IdDocument));
}
//END_CODE_INHERITANCE
}
</script>
Le code généré est stocké dans le répertoire Forms\InheritanceFields
2. Il faut ensuite créer un composant avec un bouton qui appellera le code correspondant ( en général dans le répertoire Custom_Client
Remplacer les zones en couleur par le(s) terme(s) approprié(s) (en respectant les codes couleur)
Ex : CreateAnnexe.ascx.cs ( ce code ajoute les boutons Créer Annexe , Créer Note .......

Fichier ascx associé : (CreateAnnexe.ascx)

3. Référencer ce composant et l'ajouter dans la page publiée
On peut ajouter ce composant dans le fichier FormularDesigner.xml Il est préférable de le faire dans un FormularDesginer.xml spécifique à l'application.
Dans Applications.xml on indique alors le chemin d'accès au fichier FormularDesigner.xml complémentaire :
<ApplicationProfile name="Mail Manager">
<Datasources>
<DataSource name="APSApplication" connection="AMM.Application" />
<DataSource name="APSWorkflow" connection="AMM.Application" />
<DataSource name="APSDirectory" connection="AMM.Directory" />
<DataSource name="APSPool" connection="QMDoc.APSPool" />
</Datasources>
<Properties>
<StringPair>
<First>RemoteURI</First>
<Second>tcp://PStudioSQL2k5:8078/DiskFileAccess.rem</Second>
</StringPair>
<StringPair>
<First>ApplicationName</First>
<Second>AMM</Second>
</StringPair>
<StringPair>
<First>FormularDesigner</First>
<Second>Custom/FormularDesigner.xml</Second>
</StringPair>
</Properties>
</ApplicationProfile>
Le fichier FormularDesigner.xml est du type :

Ces opérations (point 3) permettent de référencer le composant et de l'ajouter dans la liste des composants disponibles lors de la publication du formulaire.