<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://frp.sage.fr/wiki1000/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://frp.sage.fr/wiki1000/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="https://frp.sage.fr/wiki1000/index.php?action=history&amp;feed=atom&amp;title=AddAction_%28TSearchResult%29"/>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/index.php?title=AddAction_(TSearchResult)&amp;action=history"/>
		<updated>2026-06-10T01:34:09Z</updated>
		<subtitle>Historique pour cette page sur le wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>https://frp.sage.fr/wiki1000/index.php?title=AddAction_(TSearchResult)&amp;diff=14286&amp;oldid=prev</id>
		<title>Syfre : Page créée avec « {{version1000}} &lt;source lang='delphi'&gt;procedure AddAction(iPos:TSearchActionPosition; iType:TSearchActionType; const iTitle:string; const iICon:string; const iParameter:st... »</title>
		<link rel="alternate" type="text/html" href="https://frp.sage.fr/wiki1000/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='delphi'&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'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'action&lt;br /&gt;
|satNone,satOpenForm,satOpenPanel&lt;br /&gt;
|-&lt;br /&gt;
|iTitle&lt;br /&gt;
|Défini le libellé de l'action (utilisé comme bouton)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|iParameter&lt;br /&gt;
|Défini le paramètre associé à l'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'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'action est satOpenPanel le paramètre doit être le nom d'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;
|'{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 ...}}'&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;
'''1. Enregistrer l'action sur le résultat de recherche en utilisant la propriété AfterCode de la clé de recherche :'''&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+':'+TFacadeModel.FindFormOfClass(iClass)+';'; &lt;br /&gt;
 end; &lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
  sk := ModelManager.RegisterSearchKey(10,'TRoleTiers',&lt;br /&gt;
    'Caption,Tiers.code,Tiers.caption,Tiers.raisonsociale,SitePrivilegie.Adresse.codePostal,SitePrivilegie.Adresse.ville,SitePrivilegie.Adresse.telephone1',&lt;br /&gt;
    _FormOfClass('TClient')+&lt;br /&gt;
    _FormOfClass('TFournisseur')+&lt;br /&gt;
    _FormOfClass('TSalarie')+&lt;br /&gt;
    _FormOfClass('TTiersDivers')+&lt;br /&gt;
    _FormOfClass('TTransporteur')+&lt;br /&gt;
    _FormOfClass('TIntraGroupe')&lt;br /&gt;
  ); &lt;br /&gt;
  sk.Limits := 20; &lt;br /&gt;
  sk.ExtraNames := 'SitePrivilegie.Adresse.nomRueVoie';&lt;br /&gt;
  sk.FormatValue := _TP('@Tiers.code@ @Tiers.RaisonSociale@ @SitePrivilegie.Adresse.nomRueVoie@ @SitePrivilegie.Adresse.codePostal@ @SitePrivilegie.Adresse.ville@ @SitePrivilegie.Adresse.telephone1@'); &lt;br /&gt;
  sk.OrderBy := 'Tiers.code'; &lt;br /&gt;
  // &lt;br /&gt;
  AStr := 'begin ';&lt;br /&gt;
  if TFacadeModel.hasAccounting() then&lt;br /&gt;
  begin  &lt;br /&gt;
   AStr := AStr+ &lt;br /&gt;
   ' AddAction(sapRight,satOpenPanel,_TP(''Voir les pièces comptables''),''search'',''actionTiersPieces'');'+ &lt;br /&gt;
  end; &lt;br /&gt;
  AStr := AStr+' end;';&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;
'''2. Définir une classe exécutant la recherche des pièces comptable et alimentant le panneau déplié dans l'interface utilisateur'''&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('Pièces pour le tiers %s - %s'),[&lt;br /&gt;
     action.param.KeyValue['Tiers.code'],&lt;br /&gt;
     action.param.KeyValue['Tiers.caption']&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('0.00',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('Simulation') else &lt;br /&gt;
   if value=TypeLot_Reel then Result := _TP('Réel') 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('param.itemId') &lt;br /&gt;
   then itemId := action.param.itemId&lt;br /&gt;
   else itemId := ''; &lt;br /&gt;
&lt;br /&gt;
  if itemId='' then Exit; &lt;br /&gt;
  SR := resp.AddStruct('panel','{panelId:&amp;quot;tierspieces-'+itemId+'&amp;quot;, title:&amp;quot;'+_GetTitle+'&amp;quot;}');&lt;br /&gt;
  /////////////////////////////////////&lt;br /&gt;
  SR.addStruct('layout','{ name:&amp;quot;body&amp;quot; }');&lt;br /&gt;
  idx := 0; idv:=0;&lt;br /&gt;
  SR.facets[idx].id := idx;&lt;br /&gt;
  SR.facets[idx].title := '';&lt;br /&gt;
  SR.facets[idx].type := 'list';&lt;br /&gt;
  SR.facets[idx].position := 'body';&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 := 'tabular';&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('table','{columnDefs:[],rows:[]}');&lt;br /&gt;
&lt;br /&gt;
  SA := SR.facets[idx].values[idv].table.columnDefs; &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;a&amp;quot;, headerName:&amp;quot;'+_TP('Pièce')+'&amp;quot;, cellRenderer: &amp;quot;linkRenderer&amp;quot; }'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;b&amp;quot;, headerName:&amp;quot;'+_TP('Type')+'&amp;quot;}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;c&amp;quot;, headerName:&amp;quot;'+_TP('Date')+'&amp;quot;}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;d&amp;quot;, headerName:&amp;quot;'+_TP('Compte')+'&amp;quot;}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;e&amp;quot;, headerName:&amp;quot;'+_TP('Journal')+'&amp;quot;}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;f&amp;quot;, headerName:&amp;quot;'+_TP('Etablissement')+'&amp;quot;}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;g&amp;quot;, headerName:&amp;quot;'+_TP('Référence')+'&amp;quot;}'); &lt;br /&gt;
  SA.AddStruct('{field:&amp;quot;h&amp;quot;, headerName:&amp;quot;'+_TP('Référence externe')+'&amp;quot;}'); &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('(oidRoleTiers=%1)', '-datePiece', false, [itemId]);&lt;br /&gt;
  foreach inst in vSel.AsCursor do&lt;br /&gt;
   begin&lt;br /&gt;
     SA.AddStruct(Format('{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;}',[&lt;br /&gt;
      inst.numero,&lt;br /&gt;
      Format('%s?ArgTypeEcriture=mptInteger(%d)',[TFacadeModel.GetUrlOfObject(inst.oid),inst.typeLot]),&lt;br /&gt;
      Format(_TP('Pièce #%s'),[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('{name:&amp;quot;&amp;quot;, param:{itemId:&amp;quot;1B28EFFFF1C30002001E0000007F0610&amp;quot;, code:&amp;quot;XXX&amp;quot;, Caption:&amp;quot;YYY&amp;quot;}}');&lt;br /&gt;
  resp := TJson.Create('{}'); &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>