Tuesday 21.December 2010
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.
Permalink
Monday 20.December 2010
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.
Permalink
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 |
Permalink
Monday 11.January 2010
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; |
Permalink
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:

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:

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…
Permalink