produkt programmgesteuert erstellen
<p>ich habe ein produkt mit einem benutzerdefinierten feld gemäß <a href="http://www.drupalcommerce.org/discussions/3315/creating-product-programmatically">this</a> . ich weiß, dass ich mit erstellen kann</p><pre><code>$cp = commerce\_product\_new('product'); $cp-&gt;is\_new = true; $cp-&gt;revision\_id = null; $cp-&gt;uid = 1; $cp-&gt;status = 1; $cp-&gt;created = $cp-&gt;changed = time(); $cp-&gt;sku = $product[sku]; $cp-&gt;title = $product[name]; $cp-&gt;language = language\_none; $cp-&gt;commerce\_price = array(language\_none =&gt; array( 0 =&gt; array( 'amount' =&gt; $product[sale\_price] ? $product[sale\_price] : $product[retail\_price], 'currency\_code' =&gt; 'usd', )));$product[retail\_price]; commerce\_product\_save($cp); </code></pre><p>aber ich habe ein benutzerdefiniertes feld.</p><p>wie kann ich programmgesteuert ein drupal commerce-produkt mit vollständigen benutzerdefinierten feldern erstellen?</p><p>ist <code>$cp-&gt;myfield1='22';</code> ausreichend?</p>
<p>ein handelsprodukt ist eine einheit wie jedes andere, also ...</p><pre><code>$cp-&gt;field\_my\_field[language\_none][0]['value'] = '22'; </code></pre>
Kein Problem. Wenn du die Filme bzw. die Kameras zum Entwickeln bringst gibt es auf den Auftragstüten z.B. bei DM-Drogerien die Möglichkeit "mit CD" anzukreuzen. Dann bekommst du mit den Fotos eine CD mit den Bildern. Die kannst du dann auf dem PC problemlos einlesen und kombinieren und neue CDs daraus erstellen. <p>wenn dies meine entwurfsentscheidung wäre, würde ich wahrscheinlich eher eine option c (modifizierte option a) wählen.</p><h3>erstens, warum nicht 'option b':</h3><p>zum einen gefällt mir die klarheit, dass jedes produkt seinen eigenen tisch hat. wenn es sich nur um eine große tabelle mit einem feld zur bestimmung des typs handelt, ist die beziehung nicht so klar.</p><p>zum anderen würde die indizierungsstrategie immer erfordern, dass dieses typfeld aufgelistet wird. da es sich nur um 4 typen handelt, ist die indexkardinalität extrem niedrig (<code>select * from product\_table where type='x'</code> führt im grunde sowieso einen vollständigen tabellenscan durch)</p><h3>option c.</h3><ul> <li>erstellen sie eine übergeordnete tabelle, die nur die spalten enthält, die alle typen gemeinsam nutzen</li> <li>erstellen sie jeden produkttyp als eigene tabelle mit ihren einzelnen spalten, mit einem zusätzlichen: ein link zur übergeordneten tabelle</li> <li>erstellen sie jede 'link'-tabelle: product\_option, model\_option usw. mit links zu den jeweiligen schlüsseln.</li> <li>für diejenigen mit wechselseitigen links (model\_option, option\_model) erstellen sie auch diese tabellen. dies erhöht die klarheit ihrer joins für alle, die sich das ansehen.</li> </ul><p>der nachteil ist die komplexität, sicherzustellen, dass waisen vermieden werden, wenn dinge aktualisiert/gelöscht werden, und zunächst die abfragen zu entwerfen, die diese tabellen verwenden.</p> Wenn eine Spalte in der Datenbank nullfähig ist, hat die Ergebnisklasse auch eine nullfähige Eigenschaft. 

 Wenn beispielsweise eine `Order` eine `Datetime` Spalte mit dem Namen `CreatedDate` , sieht die resultierende `Order` Klasse in etwa wie folgt aus: 


```
public partial class Order: EntityObject
{
  ...
  private DateTime? _createdDate;
  ...
}

```
  Wenn \_ `createdDate` keinen Wert hat, wenn Sie `ObjectContext.SaveChanges()` aufrufen, wird eine `System.DBNull` automatisch als Teil des Befehls insert oder update an die Datenbank gesendet. 

 Hoffe das hilft Alex Hi [wolldiskont](https://community.shopify.com/c/user/viewprofilepage/user-id/766158),


Kai hier von Shopify. Danke für deinen Post.


Ich helfe dir gerne dabei deine ausverkauften Varianten in deinem Shopify Shop automatisch auszublenden.


Weißt du, welches Theme du verwendest? Wenn du eins unserer [kostenlosen Shopify Themes](https://themes.shopify.com/themes?sort_by=most_recent&price%5B%5D=free) verwendest, kannst du eine kleine Codeänderung an deinem Theme vornehmen, die in [dieser Anleitung](https://translate.google.com/translate?sl=auto&tl=de&u=https%3A%2F%2Fshopify.dev%2Ftutorials%2Fcustomize-theme-hide-variants-that-are-sold-out) beschrieben wird, um die ausverkauften Varianten auszublenden. Bevor du Code-Änderungen an deinem Shop vornimmst, also auch Apps installierst ist es immer ratsam vorher [das eigene Theme zu duplizieren](https://bit.ly/2zLhVUo), damit du problemlos zu einer funktionierenden Version deines Shops zurückkehren kannst, falls etwas schiefgehen sollte.


Wer dein Theme entwickelt hat und unterstützt [siehst du so nach](https://screenshot.click/20-11-izpjv-3ak6i.mp4). Alternativ kannst du bei einem Shopify Theme auch unsere Themedesigner fragen diese Anpassung im Rahmen der [Designtime](https://help.shopify.com/de/manual/online-store/os/using-themes/theme-support) für dich vorzunehmen. 


Falls du keins unserer Themes verwendest, kannst du entweder beim Entwickler deines Themes nachfragen diese Anpassung vorzunehmen oder du stellst einen [Shopify Experten](http://bit.ly/2B8rcXk) ein, um diese Anpassung vorzunehmen. 


Bitte gib Bescheid, ob das klappt oder wenn du noch irgendwelche anderen Fragen haben solltest.


Mit freundlichen Grüßen!


Kai Sie können verwenden 


```
DbConfiguration.SetConfiguration(new YourDbConfiguration());

```
  Sie können also Ihre Konfiguration verwenden, ohne ein Attribut zu verwenden. 

 Aber wenn ich benutze 


```
public CeDbConfiguration()
{
 SetDefaultConnectionFactory(new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName,
                                                        @"c:\test",
                                                        @"c:\test\db.sdf"));
SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
                    SqlCeProviderServices.Instance);
}

```
  Um eine SQL CE Factory zu konfigurieren, wird der Pfad *'C: \ test'* ignoriert und ich muss auch Database.DefaultConnectionFactory setzen !! Ja, das ist kostenlos. Hier mal ein Auszug von Paypal:


Geschäftskonto eröffnen oder Konto hochstufen


Sie können ein neues Geschäftskonto eröffnen oder Ihr bestehendes Privatkonto auf ein Geschäftskonto hochstufen. Ganz egal, wofür Sie sich entscheiden, Ihr PayPal-Geschäftskonto ist immer kostenlos. Gebühren fallen nur an, wenn Sie eine Zahlung erhalten.


Achso, eine Händlernummer hast du aber in deinem Profil drin, auch als Privatperson. <p>hinweis: ab azure sql database v12 gelten diese einschränkungen nicht mehr.</p><p>das ist kein "primärindex". es gibt so etwas wie einen "primärschlüssel" und es gibt auch so etwas wie einen "clustered index". unterschiedliche konzepte, oft verwirrt. lassen sie uns angesichts dieser unterscheidung die frage noch einmal betrachten:</p><p>q1) kann der clustered-index in einer sql azure-tabelle geändert werden?<br> a: ja. verwenden sie <code>with (drop\_existing=on)</code>:</p><pre><code>create table friend ( userid int not null, id int not null); go create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>f2) kann der clustered-index einer tabelle mit einer primärschlüsseleinschränkung geändert werden?<br> a: ja, wie oben, solange die primärschlüsseleinschränkung nicht über den clustered-index erzwungen wird:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); create clustered index cdxfriend on friend (userid, id); go create clustered index cdxfriend on friend (id, userid) with (drop\_existing=on); go </code></pre><p>f3) kann die primärschlüsseleinschränkung einer tabelle geändert werden?<br> a: ja, solange die primäre einschränkung nicht über den clustered-index erzwungen wird:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key nonclustered (id)); go create clustered index cdxfriend on friend (userid, id); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key nonclustered (userid) go </code></pre><p>f4) kann der primärschlüssel einer tabelle geändert werden, wenn er über den clustered-index erzwungen wird?<br> a: ja, wenn die tabelle nie zeilen hatte:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go alter table friend drop constraint pk\_friend; alter table friend add constraint pk\_friend primary key clustered (id, userid) go </code></pre><p>f5) kann der primärschlüssel einer tabelle geändert werden, wenn er über den clustered-index erzwungen wird, wenn die tabelle gefüllt ist?<br> a: nein. jede operation, die einen aufgefüllten clustered-index in einen heap konvertiert, wird in sql azure blockiert <em>, auch wenn die tabelle leer ist </em>:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); delete from friend; go alter table friend drop constraint pk\_friend; </code></pre><p>als randnotiz: die einschränkung kann geändert werden, wenn die tabelle <em> abgeschnitten ist </em>.</p><p>die problemumgehung zum ändern der pk-einschränkung einer aufgefüllten tabelle besteht darin, das gute alte <a href="http://msdn.microsoft.com/en-us/library/ms188351.aspx"><code>sp\_rename</code></a> trick:</p><pre><code>create table friend ( userid int not null, id int not null identity(1,1), constraint pk\_friend primary key clustered (userid, id)); go insert into friend (userid) values (1); go create table friendnew ( userid int not null, id int not null identity(1,1), constraint pk\_friend\_new primary key clustered (id, userid)); go set identity\_insert friendnew on; insert into friendnew (userid, id) select userid, id from friend; set identity\_insert friendnew off; go begin transaction exec sp\_rename 'friend', 'friendold'; exec sp\_rename 'friendnew', 'friend'; commit; go sp\_help 'friend'; </code></pre><p>das <code>sp\_rename</code> ansatz hat einige probleme, vor allem, dass berechtigungen für die tabelle während des umbenennens nicht übertragen werden, sowie fremdschlüsseleinschränkungen.</p> <ol> <li> <p>wenn sie als unternehmen verkaufen, schützen sie ihr privatvermögen vor verärgerten kunden, wettbewerbern und allen anderen, die sie ausprobieren möchten</p> </li> <li> <p>der verkauf unter einem firmennamen hilft bei der entwicklung einer marke. richtiger name ist langweilig. überlegen sie sich etwas kreatives und machen sie den namen bekannt.</p> </li> <li> <p>abhängig von ihrem speziellen namen und seiner herkunft haben einige leute möglicherweise bestimmte negative assoziationen oder ideen und entscheiden, dass sie ihren namen einfach nicht mögen, um mit ihnen in irgendeiner weise geschäfte zu machen (geben ihnen möglicherweise nicht nur 0,99 usd oder nehmen sogar ihre app kostenlos). ein firmenname schützt sie vor phobischen menschen.</p> </li> <li> <p>mit einer marke erhalten sie anerkennung für ihre neuen apps. wenn sie eine andere "advanced notes" -app einwerfen, besteht eine gute chance, dass sie unbemerkt bleiben. wenn sie es "coolcomp notes" nennen, wird es ein interesse wecken, wenn ihr name mit großartigen apps verbunden ist.</p> </li> <li> <p>eine marke hilft ihnen dabei, ihre apps einfach und konsistent zu benennen. anstatt zu kämpfen, um einen weiteren namen für ihre nächste app wie "super notes", "personal finances plus" usw. zu erfinden, können sie sie einfach zu "coolcomp notes", "coolcomp finances" machen. viel einfacher und erstellt ein portfolio.</p> </li> <li> <p>eine marke ist später einfacher und zu einem höheren preis zu verkaufen als eine sammlung zufälliger apps von einem typen namens "joshua carmody".</p> </li> </ol> eine firmenhomepage bzw. ein shop Hallo,
  

  
Hier ==> [Klicken](https://de.ccm.net/faq/146-itunes-account-ohne-kreditkarte-erstellen)