<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://wiki.sage.fr/index.php?action=history&amp;feed=atom&amp;title=AddAction_%28TSearchResult%29</id>
	<title>AddAction (TSearchResult) - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.sage.fr/index.php?action=history&amp;feed=atom&amp;title=AddAction_%28TSearchResult%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.sage.fr/index.php?title=AddAction_(TSearchResult)&amp;action=history"/>
	<updated>2026-05-24T23:19:18Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://wiki.sage.fr/index.php?title=AddAction_(TSearchResult)&amp;diff=14286&amp;oldid=prev</id>
		<title>Syfre : Page créée avec « {{version1000}} &lt;source lang=&#039;delphi&#039;&gt;procedure AddAction(iPos:TSearchActionPosition; iType:TSearchActionType; const iTitle:string; const iICon:string; const iParameter:st... »</title>
		<link rel="alternate" type="text/html" href="http://wiki.sage.fr/index.php?title=AddAction_(TSearchResult)&amp;diff=14286&amp;oldid=prev"/>
		<updated>2022-07-11T07:27:53Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « {{version1000}} &amp;lt;source lang=&amp;#039;delphi&amp;#039;&amp;gt;procedure AddAction(iPos:TSearchActionPosition; iType:TSearchActionType; const iTitle:string; const iICon:string; const iParameter:st... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{version1000}}&lt;br /&gt;
&amp;lt;source lang=&amp;#039;delphi&amp;#039;&amp;gt;procedure AddAction(iPos:TSearchActionPosition; iType:TSearchActionType; const iTitle:string; const iICon:string; const iParameter:string);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette méthode enregistre une action sur un résultat de recherche.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|iPos&lt;br /&gt;
|Défini la position de l&amp;#039;action dans la vue du résultat&lt;br /&gt;
|sapLeft,sapRight  &lt;br /&gt;
|-&lt;br /&gt;
|iType&lt;br /&gt;
|Défini le type de l&amp;#039;action&lt;br /&gt;
|satNone,satOpenForm,satOpenPanel&lt;br /&gt;
|-&lt;br /&gt;
|iTitle&lt;br /&gt;
|Défini le libellé de l&amp;#039;action (utilisé comme bouton)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|iParameter&lt;br /&gt;
|Défini le paramètre associé à l&amp;#039;action&lt;br /&gt;
|&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|satNone&lt;br /&gt;
|non implémenté&lt;br /&gt;
|-&lt;br /&gt;
|satOpenForm&lt;br /&gt;
|non implémenté&lt;br /&gt;
|-&lt;br /&gt;
|satOpenPanel&lt;br /&gt;
|Nom de la classe exécutant l&amp;#039;action et alimentant le panel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Classe action===&lt;br /&gt;
Lorsque le type d&amp;#039;action est satOpenPanel le paramètre doit être le nom d&amp;#039;une classe non persistante implémentant une méthode jon Execute.&lt;br /&gt;
&lt;br /&gt;
La signature de cette méthode doit être :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
    Function Execute(action:TjsonStruct; resp:TJson):boolean;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|action&lt;br /&gt;
|input&lt;br /&gt;
|Structure json contenant le résultat de recherche.&lt;br /&gt;
|&amp;#039;{name:&amp;quot;xxx&amp;quot;, param:{itemId:&amp;quot;1B28EFFFF1C30002001E0000007F0610&amp;quot;,  .... valeurs des attributs de la clé de recherche pour ce résultat ...}}&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|resp&lt;br /&gt;
|output&lt;br /&gt;
|Objet json contenant une structure de données alimentant la grille résultat du panel action&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Exemple===&lt;br /&gt;
&lt;br /&gt;
Afficher les pièces comptables sur un résultat de recherche retournant un tiers.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Enregistrer l&amp;#039;action sur le résultat de recherche en utilisant la propriété AfterCode de la clé de recherche :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
//procedure Initialize;&lt;br /&gt;
var sk:TSearchKey; AStr:string; &lt;br /&gt;
&lt;br /&gt;
 function _FormOfClass(const iClass:string):string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := iClass+&amp;#039;:&amp;#039;+TFacadeModel.FindFormOfClass(iClass)+&amp;#039;;&amp;#039;; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  sk := ModelManager.RegisterSearchKey(10,&amp;#039;TRoleTiers&amp;#039;,&lt;br /&gt;
    &amp;#039;Caption,Tiers.code,Tiers.caption,Tiers.raisonsociale,SitePrivilegie.Adresse.codePostal,SitePrivilegie.Adresse.ville,SitePrivilegie.Adresse.telephone1&amp;#039;,&lt;br /&gt;
    _FormOfClass(&amp;#039;TClient&amp;#039;)+&lt;br /&gt;
    _FormOfClass(&amp;#039;TFournisseur&amp;#039;)+&lt;br /&gt;
    _FormOfClass(&amp;#039;TSalarie&amp;#039;)+&lt;br /&gt;
    _FormOfClass(&amp;#039;TTiersDivers&amp;#039;)+&lt;br /&gt;
    _FormOfClass(&amp;#039;TTransporteur&amp;#039;)+&lt;br /&gt;
    _FormOfClass(&amp;#039;TIntraGroupe&amp;#039;)&lt;br /&gt;
  ); &lt;br /&gt;
  sk.Limits := 20; &lt;br /&gt;
  sk.ExtraNames := &amp;#039;SitePrivilegie.Adresse.nomRueVoie&amp;#039;;&lt;br /&gt;
  sk.FormatValue := _TP(&amp;#039;@Tiers.code@ @Tiers.RaisonSociale@ @SitePrivilegie.Adresse.nomRueVoie@ @SitePrivilegie.Adresse.codePostal@ @SitePrivilegie.Adresse.ville@ @SitePrivilegie.Adresse.telephone1@&amp;#039;); &lt;br /&gt;
  sk.OrderBy := &amp;#039;Tiers.code&amp;#039;; &lt;br /&gt;
  // &lt;br /&gt;
  AStr := &amp;#039;begin &amp;#039;;&lt;br /&gt;
  if TFacadeModel.hasAccounting() then&lt;br /&gt;
  begin  &lt;br /&gt;
   AStr := AStr+ &lt;br /&gt;
   &amp;#039; AddAction(sapRight,satOpenPanel,_TP(&amp;#039;&amp;#039;Voir les pièces comptables&amp;#039;&amp;#039;),&amp;#039;&amp;#039;search&amp;#039;&amp;#039;,&amp;#039;&amp;#039;actionTiersPieces&amp;#039;&amp;#039;);&amp;#039;+ &lt;br /&gt;
  end; &lt;br /&gt;
  AStr := AStr+&amp;#039; end;&amp;#039;;&lt;br /&gt;
  //&lt;br /&gt;
  sk.AfterCode := AStr; &lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Définir une classe exécutant la recherche des pièces comptable et alimentant le panneau déplié dans l&amp;#039;interface utilisateur&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
unit htmlportalPackage;&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
Type&lt;br /&gt;
  ActionTiersPieces = Class(TitObject)&lt;br /&gt;
    {$O  modified=&amp;quot;1899-12-30T00:00:00&amp;quot; label=&amp;quot;Classe support recherche des pièces de compte&amp;quot; options=cloNoPersistent}&lt;br /&gt;
  public&lt;br /&gt;
    Function Execute(action:TjsonStruct; resp:TJson):boolean;&lt;br /&gt;
    Procedure Test;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
{! DIR ActionTiersPieces}&lt;br /&gt;
{$MS ActionTiersPieces.Execute soapName=&amp;quot;MethodName&amp;quot;}&lt;br /&gt;
{$MS ActionTiersPieces.Test soapName=&amp;quot;MethodName&amp;quot;}&lt;br /&gt;
{!END DIR}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{! DOC ActionTiersPieces}&lt;br /&gt;
{!END DOC}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Implementation&lt;br /&gt;
&lt;br /&gt;
{! METHODS ActionTiersPieces}&lt;br /&gt;
Function ActionTiersPieces.Execute(action:TjsonStruct; resp:TJson):boolean;&lt;br /&gt;
Type&lt;br /&gt;
  TiersPiece = viewOf(TPiece)&lt;br /&gt;
    numero:string = numero;&lt;br /&gt;
    datePiece:TDatetime = pDate;&lt;br /&gt;
    reference:String = reference; &lt;br /&gt;
    referenceOrigine: string = referenceOrigine; &lt;br /&gt;
    journalCode:string = journal.code; &lt;br /&gt;
    etablissementCaption:string = etablissement.Caption; &lt;br /&gt;
    compteGeneral:string = ecrituresList.compteGeneral.codeCompte; &lt;br /&gt;
    roleTiers:TRoleTiers = ecrituresList.roleTiers;&lt;br /&gt;
    typeLot:Integer = lot.typeLot; &lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
 function _GetTitle():string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := Format(_TP(&amp;#039;Pièces pour le tiers %s - %s&amp;#039;),[&lt;br /&gt;
     action.param.KeyValue[&amp;#039;Tiers.code&amp;#039;],&lt;br /&gt;
     action.param.KeyValue[&amp;#039;Tiers.caption&amp;#039;]&lt;br /&gt;
   ]); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
 function _FormatDate(dd:TDatetime):string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := DateToStr(dd); //localized&lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
 function _FormatQuantity(q:TQuantity):string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := q.AsString;&lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
 function _FormatCurrency(montant:Currency; const iDevise:string):string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := FormatFloat(&amp;#039;0.00&amp;#039;,montant); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
 function _FormatEnum(const iEnumName:String; value:Integer):string;&lt;br /&gt;
 begin&lt;br /&gt;
   Result := ModelManager.GetEnumName(iEnumName,value); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
 function _TypeLot(value:Integer):string;&lt;br /&gt;
 begin&lt;br /&gt;
   if value=TypeLot_Simulation then Result := _TP(&amp;#039;Simulation&amp;#039;) else &lt;br /&gt;
   if value=TypeLot_Reel then Result := _TP(&amp;#039;Réel&amp;#039;) else &lt;br /&gt;
   Result := inttostr(value); &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var itemId,aClass,aForm:string; vSel:TSelector; inst:TiersPiece; &lt;br /&gt;
    idx,idv,idr,limits:Integer; SR:TjsonStruct; SA:TjsonArray;&lt;br /&gt;
begin&lt;br /&gt;
  Result := FALSE;&lt;br /&gt;
&lt;br /&gt;
  // This is TRoleTiers  oid&lt;br /&gt;
  if action.Exists(&amp;#039;param.itemId&amp;#039;) &lt;br /&gt;
   then itemId := action.param.itemId&lt;br /&gt;
   else itemId := &amp;#039;&amp;#039;; &lt;br /&gt;
&lt;br /&gt;
  if itemId=&amp;#039;&amp;#039; then Exit; &lt;br /&gt;
  SR := resp.AddStruct(&amp;#039;panel&amp;#039;,&amp;#039;{panelId:&amp;quot;tierspieces-&amp;#039;+itemId+&amp;#039;&amp;quot;, title:&amp;quot;&amp;#039;+_GetTitle+&amp;#039;&amp;quot;}&amp;#039;);&lt;br /&gt;
  /////////////////////////////////////&lt;br /&gt;
  SR.addStruct(&amp;#039;layout&amp;#039;,&amp;#039;{ name:&amp;quot;body&amp;quot; }&amp;#039;);&lt;br /&gt;
  idx := 0; idv:=0;&lt;br /&gt;
  SR.facets[idx].id := idx;&lt;br /&gt;
  SR.facets[idx].title := &amp;#039;&amp;#039;;&lt;br /&gt;
  SR.facets[idx].type := &amp;#039;list&amp;#039;;&lt;br /&gt;
  SR.facets[idx].position := &amp;#039;body&amp;#039;;&lt;br /&gt;
  SR.facets[idx].values[idv].id := idv;&lt;br /&gt;
  SR.facets[idx].values[idv].facet := idx;&lt;br /&gt;
  SR.facets[idx].values[idv].class := &amp;#039;tabular&amp;#039;;&lt;br /&gt;
  SR.facets[idx].values[idv].usingMainController := true; &lt;br /&gt;
  SR.facets[idx].values[idv].title := _GetTitle;&lt;br /&gt;
  SR.facets[idx].values[idv].AddStruct(&amp;#039;table&amp;#039;,&amp;#039;{columnDefs:[],rows:[]}&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  SA := SR.facets[idx].values[idv].table.columnDefs; &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;a&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Pièce&amp;#039;)+&amp;#039;&amp;quot;, cellRenderer: &amp;quot;linkRenderer&amp;quot; }&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;b&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Type&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;c&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Date&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;d&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Compte&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;e&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Journal&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;f&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Etablissement&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;g&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Référence&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
  SA.AddStruct(&amp;#039;{field:&amp;quot;h&amp;quot;, headerName:&amp;quot;&amp;#039;+_TP(&amp;#039;Référence externe&amp;#039;)+&amp;#039;&amp;quot;}&amp;#039;); &lt;br /&gt;
   &lt;br /&gt;
  idr := 0; limits := 10;&lt;br /&gt;
  SA := SR.facets[idx].values[idv].table.rows; &lt;br /&gt;
  vSel := TiersPiece.CreateSelector(&amp;#039;(oidRoleTiers=%1)&amp;#039;, &amp;#039;-datePiece&amp;#039;, false, [itemId]);&lt;br /&gt;
  foreach inst in vSel.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     SA.AddStruct(Format(&amp;#039;{a:{title:&amp;quot;%s&amp;quot;, link:&amp;quot;%s&amp;quot;, linkTitle:&amp;quot;%s&amp;quot;}, b:&amp;quot;%s&amp;quot;, c:&amp;quot;%s&amp;quot;, d:&amp;quot;%s&amp;quot;, e:&amp;quot;%s&amp;quot;, f:&amp;quot;%s&amp;quot;, g:&amp;quot;%s&amp;quot;, h:&amp;quot;%s&amp;quot;}&amp;#039;,[&lt;br /&gt;
      inst.numero,&lt;br /&gt;
      Format(&amp;#039;%s?ArgTypeEcriture=mptInteger(%d)&amp;#039;,[TFacadeModel.GetUrlOfObject(inst.oid),inst.typeLot]),&lt;br /&gt;
      Format(_TP(&amp;#039;Pièce #%s&amp;#039;),[inst.numero]), &lt;br /&gt;
      // &lt;br /&gt;
      _TypeLot(inst.typeLot), &lt;br /&gt;
      _FormatDate(inst.datePiece), &lt;br /&gt;
      inst.compteGeneral, &lt;br /&gt;
      inst.journalCode, &lt;br /&gt;
      inst.etablissementCaption, &lt;br /&gt;
      inst.reference,&lt;br /&gt;
      inst.referenceOrigine &lt;br /&gt;
     ])); &lt;br /&gt;
     idr := idr+1; &lt;br /&gt;
     if idr=limits then break; &lt;br /&gt;
   end; &lt;br /&gt;
&lt;br /&gt;
  Result := True;&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
Procedure ActionTiersPieces.Test;&lt;br /&gt;
var action,resp:Tjson; SR:TjsonStruct; SS:string;&lt;br /&gt;
begin&lt;br /&gt;
  action := TJson.Create(&amp;#039;{name:&amp;quot;&amp;quot;, param:{itemId:&amp;quot;1B28EFFFF1C30002001E0000007F0610&amp;quot;, code:&amp;quot;XXX&amp;quot;, Caption:&amp;quot;YYY&amp;quot;}}&amp;#039;);&lt;br /&gt;
  resp := TJson.Create(&amp;#039;{}&amp;#039;); &lt;br /&gt;
  Execute(action,resp);&lt;br /&gt;
  resp.CopyToClipboard; &lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
{!END METHODS}&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Version1000]]&lt;/div&gt;</summary>
		<author><name>Syfre</name></author>
	</entry>
</feed>