Montag, 27. Januar 2014

Windows Phone 8 Gestengesteuerte Seitenwechsle

Im ersten Moment war es mir ein Rätzel wie ich einen simplen Seiten Aufruf, für Windows Phone 8 gestengesteuert implementieren sollte. Viel Beispiele und Implementieren Basieren auf dem Silverlight Toolkit für Windows Phone.
Leider ist diese Toolkit für Windows Phone 8 Obsolet, ich habe lange gesucht bis ich auf folgenden Link gestoßen bin.



Wie immer sind die einfachsten Lösungen meist die effektivste, hier wir entsprechend auf das ManipulationCompleted Event des jeweiligen Controls reagiert. Entsprechend der Bewegung Richtung kann man seinen eigenen Seiten Aufruf platzieren.

private void LayoutRoot_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
        {
            double dY = e.TotalManipulation.Translation.Y;
            double dX = e.TotalManipulation.Translation.X; 

            if (Math.Abs(dY) > Math.Abs(dX))
            {
                // Vertical
            }
            else
            {
                // Horizontal
                if (dX < 0)
                {
                    NavigationService.Navigate(new Uri("/SecondPage.xaml", UriKind.Relative));
                }
            }
        }

Freitag, 10. Januar 2014

AX2009 Methoden in einen Thread ausführen.

Die ganze Idee der Schaffung eines separaten Thread, um einen Prozess durchzuführen ist eine anerkannte Technik, um mit Multi-Prozesse zu einem bestimmten Zeitpunkt separate Anwendungs-Thread zu schaffen, auf die die Benutzeranwendung zugreift.

Bei Dynamics AX, ist es manchmal nicht so einfach, zu erkennen wo und warum Sie das Themen Multi-Threading verwenden sollten, um einen bestimmten Prozess oder Entwicklungsziel zu erreichen.
In meinem Fall war es, dass ein Prozess des Main Thread. Das weiterarbeitet der Nutzer verzögert, bis der Prozess beendet wurde. Es lag nun nahe diese länger in einen eigenen Thread laufen zu lassen.
Das folgende Beispiel soll zeigen wie man einen Dynamics AX Prozess in einen eigenen Thread ausführen kann. Hierbei war mir eine Rückmeldung der Prozesse nicht wichtig.
Für dieses Beispiel habe ich einen Job erstellt der einen entsprechenden Prozess einer Klasse Kapselt.

static void ThreadJob(Args _args)
{
    Thread              t;
    ExecutePermission   perm;
    container           con;
    ;
    perm = new ExecutePermission();
    perm.assert();
…   // create new thread
    t = new Thread();
    //set parameter values
    con = conins(con,1,’param1’);
    con = conins(con,2,’param2’);
    t.setInputParm(con);
    // run thread
    t.run(classnum(LongProcess), staticMethodstr(LongProcess, ThreadExecute));
}
 

Die Methode “ThreadExecute” der Klasse “LongProcess” beinhält den eigentlichen Source des Prozess.
server static void ThreadExecute(Thread T)
{
    container                 ThParams = T.getInputParm();
    Set                       permissionSet;
    str                       param1;
    int                       param2;
    ;
    permissionSet =  new Set(Types::Class);
    permissionSet.add(new InteropPermission(InteropKind::ClrInterop));
    CodeAccessPermission::assertMultiple(permissionSet);

   //get parameter values
   param1= conpeek(ThParams, 1);
   param2= conpeek(ThParams, 2);
   // run long term process  
   // ………
   

   CodeAccessPermission::revertAssert();

}