Istnieją dwa sposoby, aby przekazać parametry do działań niestandardowych, będzie jedną pracę do natychmiastowego wykonania CA a druga będzie działać na odroczony działań niestandardowych.
Natychmiastowe CA (nie może być wycofana):
Aby przekazywać argumenty do natychmiastowego CA można ustawić właściwość wymaganą nazwę i do niego dostęp z sesji.
W Wix:
<Property Id="MyProp" Value="MyValue" />
W Kalifornia:
[CustomAction]
public static ActionResult NameOfMyCA(Session session)
{
string myArg = session["MyProp"];
}
odroczony CA:
Aby przekazywać argumenty odroczonego CA trzeba użyć CustomActionData Property, tym Właściwość jest jedyną, do której można uzyskać dostęp z odroczonego urzędu certyfikacji.
W przypadku WIX The DTF obejmuje klasę CustomActionData który jest słownikiem klucz/wartość, i masz do niego dostęp za pomocą:
W Wix:
<CustomAction Id="MyCustomAction" .../>
<Property Id="MyCustomAction" Value="Arg1=value1;Arg2=value2;Arg3=value3;Arg4=[MyProperty]" />
W CA:
[CustomAction]
public static ActionResult NameOfMyCA(Session session)
{
CustomActionData data = session.CustomActionData;
//Access each argument like this:
string arg1 = data["Arg1"];
string arg2 = data["Arg2"];
string arg3 = data["Arg3"];
}
Natychmiastowe CA + CustomActionData:
Jeśli chcesz użyć CustomActionData do natychmiastowego CA można zrobić coś takiego:
W Wix:
<Property Id="MyCustomAction" Value="Arg1=value1;Arg2=value2;Arg3=value3;Arg4=[MyProperty]" />
w CA:
[CustomAction]
public static ActionResult NameOfMyCA(Session session)
{
CustomActionData data = new CustomActionData(session["MyCustomAction"]);
//Access each argument like this:
string arg1 = data["Arg1"];
string arg2 = data["Arg2"];
string arg3 = data["Arg3"];
string arg4 = session.Format(data["Arg4"]);
}
W przypadku Arg4 ponieważ zawiera wartość nieruchomości, do której musisz uzyskać dostęp w następujący sposób:
string arg4 = session.Format(data["Arg4"]);
Niestety to będzie działać tylko w bezpośrednim CA, oznacza to, że jeśli chcesz użyć wartości tej właściwości w odroczonym CA trzeba będzie mieć dwa niestandardowe działania:
CA 1, aby ustawić CustomActionData dla CA wykonany jako natychmiastowy. (Pamiętaj, aby wymienić się z obiektem tej samej nazwie zdefiniowanej dla CustomAction.
CA 2 CA ze specyficzną logikę, która zużywa CustomActionData.
Proponuję użyć CustomActionData dla wszystkich przypadkach ten sposób jest łatwiejszy do konwersji Ci CA przed natychmiastowym odroczonego a kod jest czytelniejszy
Referencje:.
session.Format CustomActionData
Cześć te wartości nie przemijają - otrzymuję zero. –
@ user1223457, zaktualizowałem odpowiedź, czy to pomogło? – Yuriy
Dziękuję, wartości przemijają! jednak otrzymuję [TARGETDIR] jako ciąg, a Google nie jest pomocny - potrzebuję ścieżki, a nie nazwy własności. –