Tuesday 21.December 2010

Windows 7 – Anonymer Login Screen

geposted in Uncategorized um 11:14 am von alewo

Jeder kennt es von öffentlichen Rechnern mit älteren NT Systemen. Erst muss man CTRL + ALT + ENTF drücken, bevor man ein Login-Fenster angezeigt bekommt, in dem man sich sowohl mit Benutzernamen als auch Passwort anmelden muss. Da kein Benutzer voreingetragen ist, bleibt das System anonym und gibt auf den ersten Blick keine Informationen über die verfügbaren Benutzer wieder.

Wie aber stellt man diese Einstellungen unter Windows 7 her?
Ok, der erste Teil ist noch recht easy über ein grafisches Interface customizebar. Die Option das vor dem Logon CTRL + ALT + ENTF gedrückt werden muss, lässt sich folgendermaßen einstellen.
1. Ausführen des Programms “control userpasswords2″ in der Commandozeile
2. Im Tab erweitert muss im Bereich “Sichere Anmeldung” (engl. “Secure Logon”) die Checkbox ausgewählt sein. (Die Beschreibung im Fenster ist selbsterklärend).

Der zweite Teil erfordert leider einen direkten Eingriff in die Registry. Der entscheidende Schlüsselwert trägt den Namen “dontDisplayLastUserName”.
Die Einstellung wird vorgenommen über Ausführen des Commandozeilenbefehls “regedit”, welcher den windowseigenen Registryeditor öffnet.
Angepasst werden muss:
HKEY_LOCAL_MACHINE >> Software >> Microsoft >> Windows >> Current Version >> Policies >> System und hier der oben angegebene Wert “dontDisplayLastUserName”.
Enthält der Wert eine 1, so wird ein leeres Logon-Fenster angezeigt.

Link zur Registry-Key Beschreibung von MS : http://technet.microsoft.com/en-us/library/cc957392.aspx

Tada.

Monday 20.December 2010

SAP GUI Installation Windows 7 – 64 Bit

geposted in SAP um 5:06 pm von alewo

Komprimierte Informationen machen das Leben leichter… daher …

Es gibt kein offizielles 64 Bit Release für Sap GUI von SAP. Aber die 32 Bit Version tut es in diesem Falle auch.
Bei mir nicht direkt, musste zunächst
1. ordentliches und aktuelles Java Runtime Enviroment (64 Bit) installieren
2. Kompatibilitätsmodus für den SAP GUI Installer auf XP Service Pack 2 einstellen
3. Und als Administrator ausführen
- — – –
Nach der Installation möchte man auch gerne wieder die saplogon.ini Datei benutzen,… leider wird weder C:/Windows noch der system32 Ordner hierfür unter Windows 7 (64 Bit) ausgewertet. Um jedoch die saplogon.ini wie bisher nutzen zu können, muss man sie nur stattdessen in den Pfad
C:\Users\<Benutzername>\AppData\Roaming\SAP\Common\ kopieren.

Firefox Add-Ons

geposted in Tools, Tools, Tools um 11:46 am von alewo

Ja, ich lebe noch,…

So damit ich in Zukunft nicht immer vergesse, welche AddOns “wichtig” sind,… hier eine Liste.

Plugin Beschreibung
Ad Block Plus Werbebannerunterdrückung
No Script (Java-)Script Ausführung kontrollieren
Firebug Debugging von Webseiten
Colorful Tabs Buntes Tabbed Browsing
IE Tab Browserengine wechseln
Splittbrowser — Foxsplitt Aufteilung von Browserseiten
Tab Mix Plus Duplizieren von Tabs etc.
Screengrab Webseiten als Bild speichern
Foxy Proxy Erweiterte Proxy-Funktionalitäten
Download Helper Multimedia Direktspeicherung aus Webseiten
Monday 11.January 2010

Magento – Delete Order (inkl. Invoice etc.)

geposted in Magento um 6:09 pm von alewo

Das Löschen von Testbestellungen ist leider in Magento standardmäßig nicht vorgesehen, daher muss man sich im Moment leider noch selbst darum zu kümmern. Zum Glück gibt es mit der Delete Orders Extension eine Erweiterung, die einem die meiste Arbeit abnimmt, jedoch ist sie nicht vollkommen und lässt einen im Stich, wenn man Bestellungen löschen will, für die man eine Rechnung erstellt hat.

Unglücklicherweise bleiben also noch einige Bestellungen bestehen. Da ich natürlich nicht der erste bin, der damit Probleme hat, gibt es auch schon einen schönen Thread im Magento-Forum dazu.
Hier ist eine schöne Lösung der Problematik beschrieben, die aber mitunter bei einigen Installationen wegen der Kollation zu Problemen führt. Deswegen ist es nötig, die dort beschriebene Lösung anzupassen.
Auch die Temporary Tables die erstellt werden, werden in der Lösung hier als Tables erstellt, da ich nicht die Möglichkeit zum Grant der entsprechenden Rechte hatte.

Also eine Lösung die bei mir funktioniert und bei der man nur bei @orderid die ID der Bestellung die gelöscht werden soll setzen muss:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
SET @orderId = '100000001' COLLATE 'utf8_general_ci';
 
SET FOREIGN_KEY_CHECKS = 1;
 
SET @salesFlatQuoteId = (
    SELECT entity_id
      FROM sales_flat_quote
     WHERE reserved_order_id = @orderId
);
 
SET @salesOrderId = (
    SELECT entity_id
      FROM sales_order
     WHERE increment_id = @orderId
);
 
/* temp table used as an array */
CREATE TABLE del_sales(
    id      INT AUTO_INCREMENT PRIMARY KEY,
    salesId INT(10)
) 
COLLATE 'utf8_general_ci';
 
/* temp table used as an array */
CREATE TABLE del_statusSales(
    id      INT AUTO_INCREMENT PRIMARY KEY,
    salesId INT(10)
) COLLATE 'utf8_general_ci';
 
INSERT INTO del_statusSales (salesId)
    SELECT entity_id
      FROM sales_order_entity_int
     WHERE VALUE = @salesOrderId
       AND attribute_id = ANY (
        SELECT attribute_id
          FROM eav_attribute
         WHERE attribute_code = 'order_id'
    )
       AND entity_id = ANY (
        SELECT entity_id
          FROM sales_order_entity
         WHERE entity_type_id = ANY (
            SELECT entity_type_id
              FROM eav_entity_type
             WHERE entity_type_code = 'invoice'
                OR entity_type_code = 'shipment'
                OR entity_type_code = 'creditmemo'
        )
    );
 
INSERT INTO del_sales (salesId)
    SELECT entity_id
      FROM sales_order_entity
     WHERE parent_id = ANY (
        SELECT salesId
          FROM del_statusSales
    )
       AND entity_type_id = ANY (
        SELECT entity_type_id
          FROM eav_entity_type
          WHERE entity_type_code = 'invoice_item'
             OR entity_type_code = 'invoice_comment'
             OR entity_type_code = 'shipment_item'
             OR entity_type_code = 'shipment_comment'
             OR entity_type_code = 'shipment_track'
             OR entity_type_code = 'creditmemo_item'
             OR entity_type_code = 'creditmemo_comment'
    );
INSERT INTO del_sales (salesId)
    SELECT salesId
      FROM del_statusSales;
 
INSERT INTO del_sales (salesId)
    SELECT entity_id
      FROM sales_order_entity
     WHERE parent_id = @salesOrderId;
 
DELETE FROM sales_order_entity
      WHERE entity_id = ANY (
    SELECT salesId
      FROM del_sales
);
 
DELETE FROM sales_flat_quote
      WHERE reserved_order_id = @orderId;
 
DELETE FROM sales_flat_order_item
      WHERE quote_item_id = @salesFlatQuoteId;
 
DELETE FROM sales_order
      WHERE increment_id = @orderId;
 
/* drop temp tables */
DROP TABLE del_sales;
DROP TABLE del_statusSales;

Magento – Customize Order Management Workflow

geposted in Magento um 5:25 pm von alewo

Eines der größten Probleme bei Magento ist leider der fest vorgegebene Workflow. Der Besteht standardmäßig ja aus den Statuus “Pending, Hold, Processing, Canceled, Complete und Closed” und unterscheidet zwischen online und offline-Payment. Leider bilden diese Statuus nie wirklich jeden Workflow ab und eigentlich wäre es sowieso schöner, wenn man sich diesen Workflow gestalten könnte, wie man sich es wünscht. Eine recht anschauliche grafische Darstellung des Workflows habe ich hier gefunden.

Ich habe mich jetzt noch nicht im Detail mit der Umsetzung beschäftigt, aber am Ende habe ich mir zum Ziel gesetzt, soll mein Wunschworkflow so aussehen:

wunsch-workflow

Selbstverständlich soll jede dieser Stufen in dem Workflow noch einzelne Unterstufen enthalten können. Also mal los, mal schauen obs was wird.

Als erste habe ich mal mit dem Order_Status Plugin rumgespielt, was allerdings nicht die mir gewünschte Funktionalität beinhaltet bzw. bei mir nicht so funktioniert hat, wie es funktionieren sollte. Also hab ich das jetzt mal wieder deinstalliert und versuch es auf eigene Faust =) . Mit dem durch das Order_Status-Plugin gewonnen Vorwissen, wird es hoffentlich ein wenig einfacher…

Als erstes habe ich mich einmal auf die Suche gemacht, nach einer Möglichkeit, den Workflow zu ändern. Also neue Verknüpfungen zwischen den bereits bestehenden Statuus zu finden. Und Voila, fündig geworden bin ich in “app\code\core\Mage\Sales\etc\config.xml” ab etwa Zeile 544.

544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
<order>
  <statuses>
    <pending translate="label"><label>Pending</label></pending>
    <pending_paypal translate="label"><label>Pending PayPal</label></pending_paypal>
    <processing translate="label"><label>Processing</label></processing>
    <holded translate="label"><label>On Hold</label></holded>
    <complete translate="label"><label>Complete</label></complete>
    <closed translate="label"><label>Closed</label></closed>
    <canceled translate="label"><label>Canceled</label></canceled>
  </statuses>
  <states>
    <new translate="label">
        <label>New</label>
        <statuses>
            <pending/>
        </statuses>
        <visible_on_front/>
    </new>
    <pending_payment translate="label">
        <label>Pending Payment</label>
        <statuses>
            <pending_paypal/>
        </statuses>
    </pending_payment>
    <processing translate="label">
        <label>Processing</label>
        <statuses>
            <processing/>
        </statuses>
        <visible_on_front/>
    </processing>
    <complete translate="label">
        <label>Complete</label>
        <statuses>
            <complete/>
        </statuses>
        <visible_on_front/>
    </complete>
    <closed translate="label">
        <label>Closed</label>
        <statuses>
            <closed/>
        </statuses>
        <visible_on_front/>
    </closed>
    <canceled translate="label">
        <label>Canceled</label>
        <statuses>
            <canceled/>
        </statuses>
        <visible_on_front/>
    </canceled>
    <holded translate="label">
        <label>On Hold</label>
        <statuses>
            <holded/>
        </statuses>
        <visible_on_front/>
    </holded>
  </states>
</order>

Hier habe ich einfach mal jedem Status jeden anderen Status als übergang zugeordnet, um zu sehen ob der gewünschte Vorgang eintritt.

Das Resultat sah dann also folgendermaßen aus:

544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
<order>
  <statuses>
    <pending translate="label"><label>Pending</label></pending>
    <pending_paypal translate="label"><label>Pending PayPal</label></pending_paypal>
    <processing translate="label"><label>Processing</label></processing>
    <holded translate="label"><label>On Hold</label></holded>
    <complete translate="label"><label>Complete</label></complete>
    <closed translate="label"><label>Closed</label></closed>
    <canceled translate="label"><label>Canceled</label></canceled>
  </statuses>
  <states>
    <new translate="label">
        <label>New</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </new>
    <pending_payment translate="label">
        <label>Pending Payment</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
    </pending_payment>
    <processing translate="label">
        <label>Processing</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </processing>
    <complete translate="label">
        <label>Complete</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </complete>
    <closed translate="label">
        <label>Closed</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </closed>
    <canceled translate="label">
        <label>Canceled</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </canceled>
    <holded translate="label">
        <label>On Hold</label>
        <statuses>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </holded>
  </states>
</order>

Ein Test im Adminbereich bestätigt das funktionieren der Änderung. Unabhängig vom gesetzten Status der Bestellung, kann ich nun im Kommentarlauf jeden Beliebigen anderen Status setzen.

Überzeugt von diesem ersten Erfolg, will ich nun als nächstes einmal einen neuen Status mit Übergängen zu den anderen erstellen.
Ich erweitere den Code also um einen Zustand “Test”.

<order>
  <statuses>
    ...
    <test translate="label"><label>Test</label></test>
  </statuses>
  <states>
    ...
    <test translate="label">
        <label>test</label>
        <statuses>
            <test/>
            <pending/>
            <pending_paypal/>
            <processing/>
            <complete/>
            <closed/>
            <canceled/>
            <holded/>
        </statuses>
        <visible_on_front/>
    </test>
    ...
  </states>
</order>

Da nun auch der neue Testzustand wunschgemäß arbeitet, mach ich mich nun mal an den ersten richtig großen Schritt, ich erstelle alle Statuus, die ich in meinem Workflow haben möchte und entferne die unnötigen =).

Es ergab sich also folgender Inhalt…

544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
           <order>
                <statuses>
                    <pending translate="label"><label>Pending</label></pending>
                    <processing translate="label"><label>Processing</label></processing>
                    <distributed translate="label"><label>Versendet</label></distributed>
                    <complete translate="label"><label>Fertig</label></complete>
                    <retour translate="label"><label>Closed</label></retour>
                    <canceled translate="label"><label>Canceled</label></canceled>
		<correction translate="label"><label>Korrektur</label></correction>
                </statuses>
                <states>
                    <new translate="label">
                        <label>New</label>
                        <statuses>
			<pending/>
			<processing/>
			<distributed/>
			<complete/>
			<retour/>
			<correction/>
			<canceled/>
                        </statuses>
                        <visible_on_front/>
                    </new>
                    <pending translate="label">
                        <label>Pending</label>
                        <statuses>
			<pending/>
			<processing/>
			<canceled/>
                        </statuses>
                        <visible_on_front/>
                    </pending>
                    <processing translate="label">
                        <label>Processing</label>
                        <statuses>
			<processing/>
			<distributed/>
                        </statuses>
                        <visible_on_front/>
                    </processing>
                    <distributed translate="label">
                        <label>Versendet</label>
                        <statuses>
			<distributed/>
			<complete/>
			<retour/>
                        </statuses>
                        <visible_on_front/>
                    </distributed>
                    <complete translate="label">
                        <label>Fertig</label>
                        <statuses>
			<complete/>
			<retour/>
			<canceled/>
                        </statuses>
                        <visible_on_front/>
                    </complete>
                    <retour translate="label">
                        <label>Retour</label>
                        <statuses>
			<retour/>
			<correction/>
                        </statuses>
                        <visible_on_front/>
                    </retour>
                    <correction translate="label">
                        <label>Korrektur</label>
                        <statuses>
			<correction/>
			<processing/>
			<canceled/>
                        </statuses>
                        <visible_on_front/>
                    </correction>
                    <canceled translate="label">
                        <label>Canceled</label>
                        <statuses>
			<canceled/>
			<pending/>
                        </statuses>
                        <visible_on_front/>
                    </canceled>
                </states>
            </order>

nachdem nun auch dieser veränderte Workflow seine Arbeit getan hat, hat mich nun mein Größenwahn gepackt. Ich hab mir gedacht, wenn ich den Workflow Grob nachbilden kann, warum dann nicht auch im Detail. Also nächstes Ziel soll sein, diesen ersten Detailierten Workflow abzubilden:
Detailierter Workflow

Da mir im Moment die Zeit fehlt rumzuexperimentieren, werde ich das Ganze im Auge behalten und bei Gelegenheit umsetzen. Dann werde ich hier natürlich drüber berichten…

« Alte Einträge