Laden...

Forenbeiträge von schuppsl Ingesamt 789 Beiträge

26.11.2015 - 10:23 Uhr

Also ich weiss überhaupt nicht wo ich was einstellen muss.

Habe nochmal ein neues Projekt erstellt und den SAP Webservice als Dienstverweis hinzugefügt.

So sieht die Original automatisch erstellte App.config aus:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <client>
            <endpoint address="http://serveradress:8000/sap/bc/srt/rfc/sap/zkn_select_lifnr_altkn/100/zkn_select_lifnr_altkn/zkn_select_lifnr_altkn"
                binding="customBinding" bindingConfiguration="ZKN_SELECT_LIFNR_ALTKN"
                contract="ServiceReference2.ZKN_SELECT_LIFNR_ALTKN" name="ZKN_SELECT_LIFNR_ALTKN" />
            <endpoint address="http://serveradress:8000/sap/bc/srt/rfc/sap/zkn_select_lifnr_altkn/100/zkn_select_lifnr_altkn/zkn_select_lifnr_altkn"
                binding="customBinding" bindingConfiguration="ZKN_SELECT_LIFNR_ALTKN_soap12"
                contract="ServiceReference2.ZKN_SELECT_LIFNR_ALTKN" name="ZKN_SELECT_LIFNR_ALTKN_soap12" />
        </client>
        <bindings>
            <customBinding>
                <binding name="ZKN_SELECT_LIFNR_ALTKN">
                    <!--    WsdlImporter ermittelte unerkannte Richtlinienassertionen in ServiceDescription "urn:sap-com:document:sap:soap:functions:mc-style":    -->
                    <!--    <wsdl:binding name='ZKN_SELECT_LIFNR_ALTKN'>    -->
                    <!--        <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">..</sapattahnd:Enabled>    -->
                    <mtomMessageEncoding messageVersion="Soap11WSAddressing10" />
                    <httpsTransport authenticationScheme="Basic" />
                </binding>
                <binding name="ZKN_SELECT_LIFNR_ALTKN_soap12">
                    <!--    WsdlImporter ermittelte unerkannte Richtlinienassertionen in ServiceDescription "urn:sap-com:document:sap:soap:functions:mc-style":    -->
                    <!--    <wsdl:binding name='ZKN_SELECT_LIFNR_ALTKN_soap12'>    -->
                    <!--        <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">..</sapattahnd:Enabled>    -->
                    <mtomMessageEncoding />
                    <httpsTransport authenticationScheme="Basic" />
                </binding>
            </customBinding>
        </bindings>
      
    </system.serviceModel>
</configuration>

Und mein Aufruf:


 WindowsFormsApplication2.ServiceReference2.ZKN_SELECT_LIFNR_ALTKNClient soap = new ServiceReference2.ZKN_SELECT_LIFNR_ALTKNClient();

            soap.ClientCredentials.UserName.UserName = "user";
            soap.ClientCredentials.UserName.Password = "passw";
        
            WindowsFormsApplication2.ServiceReference2.ZknSelectLifnrAltkn req = new ServiceReference2.ZknSelectLifnrAltkn();
            WindowsFormsApplication2.ServiceReference2.ZknSelectLifnrAltknResponse response = new ServiceReference2.ZknSelectLifnrAltknResponse();


            req.Altkn = "100000";
            try
            {
                response = soap.ZknSelectLifnrAltkn(req);
            }catch (Exception ex)
            {
                MessageBox.Show(ex.Message + Environment.NewLine + ex.InnerException);
            }

ZKNSelect... ist einfach einj kleiner Echo Service, ich gebe was mit und bekomme was zurück.

Starte ich das Ganze dann, kommt als erstes die Meldung:

Fehlermeldung:
Zusätzliche Informationen: Ein Endpunktkonfigurationsabschnitt für Vertrag "ServiceReference2.ZKN_SELECT_LIFNR_ALTKN" konnte nicht geladen werden, da mehr als eine Endpunktkonfiguration für diesen Vertrag gefunden wurde. Geben Sie den bevorzugten Endpunktkonfigurationsabschnitt mit Namen an.

Dann entferne ich einen endpoint, dann die das so aus:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <client>
           <!-- <endpoint address="http://serveradress:8000/sap/bc/srt/rfc/sap/zkn_select_lifnr_altkn/100/zkn_select_lifnr_altkn/zkn_select_lifnr_altkn"
                binding="customBinding" bindingConfiguration="ZKN_SELECT_LIFNR_ALTKN"
                contract="ServiceReference2.ZKN_SELECT_LIFNR_ALTKN" name="ZKN_SELECT_LIFNR_ALTKN" />-->
            <endpoint address="http://serveradress:8000/sap/bc/srt/rfc/sap/zkn_select_lifnr_altkn/100/zkn_select_lifnr_altkn/zkn_select_lifnr_altkn"
                binding="customBinding" bindingConfiguration="ZKN_SELECT_LIFNR_ALTKN_soap12"
                contract="ServiceReference2.ZKN_SELECT_LIFNR_ALTKN" name="ZKN_SELECT_LIFNR_ALTKN_soap12" />
        </client>
        <bindings>
            <customBinding>
                <binding name="ZKN_SELECT_LIFNR_ALTKN">
                    <!--    WsdlImporter ermittelte unerkannte Richtlinienassertionen in ServiceDescription "urn:sap-com:document:sap:soap:functions:mc-style":    -->
                    <!--    <wsdl:binding name='ZKN_SELECT_LIFNR_ALTKN'>    -->
                    <!--        <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">..</sapattahnd:Enabled>    -->
                    <mtomMessageEncoding messageVersion="Soap11WSAddressing10" />
                    <httpsTransport authenticationScheme="Basic" />
                </binding>
                <binding name="ZKN_SELECT_LIFNR_ALTKN_soap12">
                    <!--    WsdlImporter ermittelte unerkannte Richtlinienassertionen in ServiceDescription "urn:sap-com:document:sap:soap:functions:mc-style":    -->
                    <!--    <wsdl:binding name='ZKN_SELECT_LIFNR_ALTKN_soap12'>    -->
                    <!--        <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">..</sapattahnd:Enabled>    -->
                    <mtomMessageEncoding />
                    <httpsTransport authenticationScheme="Basic" />
                </binding>
            </customBinding>
        </bindings>
      
    </system.serviceModel>
</configuration>

Dann kommt die Meldung:> Fehlermeldung:

Das bereitgestellte URI-Schema http ist ungültig; erwartet wurde "https".
Parametername: via

Danach ändere ich httpstransport zu httptransport.

Dann bekomme ich die Fehlermeldunghttp://www.mycsharp.de/wbb2/images/bbcode_csharp.adler.gif:

Fehlermeldung:
Fehler beim Erstellen des Webproxys, der Im Konfigurationsabschnitt System.net/defaultProxy angegben ist.
...Socketexception usw...

Mit dem Tool SoapUI geht es einfandfrei.
Wo ist denn der Fehler? Was muss ich wo angeben?

Edit:
Setze ich das hier ein, kommt wieder die Meldung:> Fehlermeldung:

Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung mit dem Remoteserver kann nicht hergestellt werden


<system.net>
     <defaultProxy enabled ="false">
       <proxy autoDetect ="True"/>
     </defaultProxy>
   </system.net>

 
26.11.2015 - 08:32 Uhr

Hallo telnet, vielen Dank für die ausführliche Antwort.
Ich muss mich hier erst einfuchsen, habe früher viel mit Webservices gemacht, das ist aber ne Weile her und das holt mich jetzt wieder ein.

Im soamanager ist die SOAP Version 1.1 und 1.2.

Mit dem WSDL File habe ich es auch schon versucht, keine Chance, zumal der Assisten im Visual Studio nicht die korrekten Verbindungseinstellungen generiert (irgendwo gelesen).

Mit einem Freewaretool ist es überhaupt kein Problem den Webservice anzusprechen und mit ihm zu kommunizieren, also der Funktioniert grundsätzlich.

Also ich muss wohl einiges nachholen 😃

25.11.2015 - 18:36 Uhr

Hallo Zusammen,

wir haben einen SAP RFC Webservice, dem ich mit einem C# Programm Daten entlocken sollte.
Das soll später eine Windowsanwendung sein, im Moment ist es eine Konsolenanwendung.

Nach einem Mittag versuchen und gefühlte 1000 Webseiten durchforschen bin ich langsam am verzweifeln.

Der Webservice ist per Webbrowser erreichbar.
Der Webservice ist per Nintex Workflow im SharePoint erreichbar und er kommuniziert auch. Also der Webservice ist definitiv in Ordnung.
Nun gibt es 100 verschiedene Möglichkeiten einen Webservice einzubinden und ich habe auch schon in vergangenen Projekten u.a. eigen programmierte Webservices angesprochen.

Nur hier komme ich nicht weiter.

Hier meine Web.config:



<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="WsCall.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>


  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpEndpunkt" >
          <security mode="None"></security>
        </binding>
      </netTcpBinding>
      <wsDualHttpBinding>
        <binding name="HttpEndpunkt" ></binding>
      </wsDualHttpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://xxxxxx:8000/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/zkn_select/100/zkn_select/zkn_select?sap-client=100" binding="netTcpBinding" bindingConfiguration="NetTcpEndpunkt" contract="ServiceReference1.ZKN_SELECT" name="NetTcpendpunkt" />
    </client>
  </system.serviceModel>
  
  
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    
  <system.net>
    <defaultProxy enabled="false"></defaultProxy>
  </system.net>
  <applicationSettings>
    <WsCall.Properties.Settings>
      <setting name="WsCall_refZKN_SELECT_ZKN_SELECT" serializeAs="String">
        <value>[URL]http://xxxxxxxx:8000/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/zkn_select/100/zkn_select/zkn_select?sap-client=100[/URL]</value>
      </setting>
    </WsCall.Properties.Settings>
  </applicationSettings>
</configuration>




Und hier die Programmierung:

 System.Net.NetworkCredential cr = new System.Net.NetworkCredential("user", "passw");

                refZKN_SELECT.ZknSelect ws = new refZKN_SELECT.ZknSelect();
                refZKN_SELECT.ZKN_SELECT ff = new refZKN_SELECT.ZKN_SELECT();
                ff.Credentials = cr;

                ff.Url = "http://xxxxxx:8000/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/zkn_select/100/zkn_select/zkn_select?sap-client=100";
                ff.UseDefaultCredentials = true;

                refZKN_SELECT.ZknSelectResponse res = new refZKN_SELECT.ZknSelectResponse();

                ws.Lifnr = "100000";
              


                ff.ZknSelect(ws);

Die aktuelle Fehlermeldung lautet:

Fehlermeldung:
Die zugrunde liegende Verbindung wurde geschlossen: Die Verbindung mit dem Remoteserver kann nicht hergestellt werden..

Den Service habe ich mit dem Wizard von Visual Studio 2013 eingefügt, hier habe ich die Adresse zum Test erneut eingefügt.
Wir haben hier in der Firma einen Proxy, die URL(xxxxxx) ist aber als Ausnahme eingefügt und wie gesagt, per Webbrowser und Testclient problemlos erreichbar

Was läuft hier falsch?
Ich hoffe sehr, mir kann jemand helfen, da es ein wichtiges Projekt darstellt und die Zeit natürlich drängt...

Vielen Dank!

28.07.2015 - 08:38 Uhr

Analog zu dem verlinkten Beispiel geht es auch nicht in diesem Event... scheint also definitiv das falsche zu sein.

28.07.2015 - 07:01 Uhr

Guten Morgen.

Also ich mache das ganze Prozedere ja im Event CellValueChanged.
Liegt es vielleicht daran?

Irgendwie muss ich ja feststellen, ob eine Zeile oder Zelle geändert wurde und dieses abfangen und in die DB schreiben. Per Button möchte ich das nicht machen, sondern direkt bei Änderung bzw. neuer Zeile.
Habe schon etliche Events ausprobiert und das erscheint mir als das sinnvollste.
Kann es daran liegen?

EDIT: Also nach diesem Beispiel geht es, einfacher geht es nicht mehr.

Allerdings muss man dafür einen Button drücken, was oft vergessen wird. Daher hätte ich das gerne in einem Event. Welches wäre hier am sinnvollsten?

27.07.2015 - 16:42 Uhr

Ja leider wird trotzdem nichts zurückgeschrieben...auch wenn ich es ganz minimal erstelle wie in deinem Beispiel...

27.07.2015 - 16:34 Uhr

Habe ich gerade versucht, bringt leider nichts...

27.07.2015 - 16:01 Uhr

Ich habe es gefunden. Ich benutze den adapter weiter oben schon für eine Zuweisung, daher sind hier wohl noch "Reste" enthalten, die mit in die DataTable geschrieben werden.
Vielen Dank.

27.07.2015 - 16:00 Uhr

Hallo.
entweder bin ich heute schon total neben der Kapp oder ich bin Urlaubsreif:

Ich binde eine DataTable an eine DataGridViewSource:



   con = new SqlConnection(Properties.Settings.Default.MietkleidungConnectionString);
            string befehl = "SELECT mt.ID, mt.PersonalID, mt.Menge, mt.KleidungsID, mt.Schluesselnummer, mt.Groesse FROM miete mt";
            adapMiete = new SqlDataAdapter(befehl, con);
            
            datatMiete = new DataTable("Verwaltung");
           datatMiete.Locale = System.Globalization.CultureInfo.InvariantCulture;
            adapMiete.Fill(datatMiete);
[B]            cmbl = new SqlCommandBuilder(adapMiete);            [/B]
            dataGridViewMiete.DataSource = datatMiete;
           
            datatMiete.PrimaryKey =  new DataColumn[]{datatMiete.Columns["ID"]};


Funktioniert soweit und die Daten werden im DataGridView angezeigt.
Auch der Insert funktioniert, das mache ich über das CellValueChanges Event:



DataRow row = datatMiete.NewRow();
                row[0] = ++x;
                row[1] = dataGridViewMiete.Rows[e.RowIndex].Cells[1].Value.ToString() == "" ? 2 : Convert.ToInt32(dataGridViewMiete.Rows[e.RowIndex].Cells[1].Value);
                row[2] = dataGridViewMiete.Rows[e.RowIndex].Cells[2].Value.ToString() == "" || dataGridViewMiete.Rows[e.RowIndex].Cells[2].Value == DBNull.Value ? 0 : Convert.ToInt16(dataGridViewMiete.Rows[e.RowIndex].Cells[2].Value);
                row[3] = dataGridViewMiete.Rows[e.RowIndex].Cells[3].Value.ToString() == "" ? 22 : Convert.ToInt16(dataGridViewMiete.Rows[e.RowIndex].Cells[3].Value);
                row[4] = dataGridViewMiete.Rows[e.RowIndex].Cells[4].Value.ToString() == "" ? "112233" : dataGridViewMiete.Rows[e.RowIndex].Cells[4].Value.ToString();
                row[5] = dataGridViewMiete.Rows[e.RowIndex].Cells[5].Value.ToString() == "" || dataGridViewMiete.Rows[e.RowIndex].Cells[5].Value == DBNull.Value ? "0" : dataGridViewMiete.Rows[e.RowIndex].Cells[5].Value.ToString(); ;
[B]
datatMiete.Rows.Add(row);
 adapMiete.Update(datatMiete);[/B]




Geht soweit.
Im selben event möchte ich nun Änderungen speichern:


\*Haltepunkt
DataRow row = datatMiete.Rows[e.RowIndex];
                datatMiete.Rows[e.RowIndex][0] = x;
                datatMiete.Rows[e.RowIndex][1] = dataGridViewMiete.Rows[e.RowIndex].Cells[1].Value.ToString();// == "" ? 2 : Convert.ToInt32(dataGridViewMiete.Rows[e.RowIndex].Cells[1].Value);
                datatMiete.Rows[e.RowIndex][2] = dataGridViewMiete.Rows[e.RowIndex].Cells[2].Value.ToString();// == "" || dataGridViewMiete.Rows[e.RowIndex].Cells[2].Value == DBNull.Value ? 0 : Convert.ToInt16(dataGridViewMiete.Rows[e.RowIndex].Cells[2].Value);
                datatMiete.Rows[e.RowIndex][3] = dataGridViewMiete.Rows[e.RowIndex].Cells[3].Value.ToString();// == "" ? 22 : Convert.ToInt16(dataGridViewMiete.Rows[e.RowIndex].Cells[3].Value);
                datatMiete.Rows[e.RowIndex][4] = dataGridViewMiete.Rows[e.RowIndex].Cells[4].Value.ToString();// == "" ? "112233" : dataGridViewMiete.Rows[e.RowIndex].Cells[4].Value.ToString();
                datatMiete.Rows[e.RowIndex][5] = dataGridViewMiete.Rows[e.RowIndex].Cells[5].Value.ToString();// == "" || dataGridViewMiete.Rows[e.RowIndex].Cells[5].Value == DBNull.Value ? "0" : dataGridViewMiete.Rows[e.RowIndex].Cells[5].Value.ToString(); ;
                //      MessageBox.Show(adapMiete.UpdateCommand.CommandText);

           //     DataRowState state = row.RowState;
             //   DataTable getch = datatMiete.GetChanges();
                adapMiete.Update(datatMiete);



Also ich schnappe mir den RowIndex und speichere die Änderungen im Datatable.
Das Problem hierbei ist nun, dass der RowState immer auch "unchanged" steht bzw. GetChanges = null ist.

Die Tabelle hat 6 Spalten. Ändere ich die Dritte, kann ich mir das ja anschauen im Debugger.

Haltepunkt ist auf der ersten Zeile, hier schaue ich nun in die DataTable den einen Wert an.
An dieser Stelle ist dieser aber schon eingetragen, obwohl ich die Zuweisungen noch gar nicht durchlaufen habe.
Daher ist RowState auch immer unchanged.
Doch woher kommt das? Warum ist in der DataTable der geänderte Wert schon aktualisiert, obwohl ich den erst hier zuweise?

27.07.2015 - 13:57 Uhr

Hallo.

Ich bin aktuell am verzweifeln.

Ich fülle eine Datatable aus einer Datenbankabfrage:



 con = new SqlConnection(Properties.Settings.Default.MietkleidungConnectionString);
            string befehl = "SELECT mt.ID, mt.PersonalID, mt.Menge, mt.KleidungsID, mt.Schluesselnummer, mt.Groesse FROM miete mt";
            adap = new SqlDataAdapter(befehl, con);
            datatMiete = new DataTable("Verwaltung");
            datatMiete.Locale = System.Globalization.CultureInfo.InvariantCulture;
            adap.Fill(datatMiete);
            cmbl = new SqlCommandBuilder(adap);
            dataGridViewMiete.DataSource = datatMiete;
            datatMiete.PrimaryKey =  new DataColumn[]{datatMiete.Columns["ID"]};
            datatMiete.Columns["ID"].AutoIncrement = true;


Später im Programm füge ich in einem Event eine weitere Row der Datatable hinzu, mittlerweile auf einfachste Weise:


 DataRow row = datatMiete.NewRow();
          
            row[0] = 28;
            row[1] = 22;
            row[2] = "2";
            row[3] = "2";
            row[4] = "1";
            row[5] = "8";

            datatMiete.Rows.Add(row);

Die Datatable enthält bis dahin drei Einträge.
Die eine Row mit den Daten hier wird erfolgreich zugefügt, aber zusätzlich werden noch zwei weitere hinzugefügt!

datatMiete[3] = wie hier eingefügt
datatMiete[4] = ??? (INdex 1 ist immer 3 ??)
datatMiete[5] = INdex[0] = 29 (28+1?) aber warum?)

Ich kann mir nicht erklären woher die zwei weiteren Einträge kommen, ich füge hier doch nur eines hinzu...?


03.07.2015 - 09:12 Uhr

Ok, ich werde es mir reinziehen.
Da die Zeit drängt, lasse ich das mit dem LINQ und setze die Befehle direkt per SQL ab, ist mir auch lieber, denn dann weiss ich was geschieht.


using (SqlConnection c = new SqlConnection(Properties.Settings.Default.MietkleidungConnectionString))
            {
                string befehl = String.Empty;

                befehl = "SELECT StandortNr, Bezeichnung FROM Standort";
                using (SqlDataAdapter adapter = new SqlDataAdapter(befehl, c))
                {
                    DataTable StandortTable = new DataTable();
                    adapter.Fill(StandortTable);
                    dataGridViewStandort.DataSource = StandortTable;
                }
            }

Sollte so ok sein? 🤔

03.07.2015 - 08:34 Uhr

Moin,

es ist Linq to SQL am Werk, richtig.
Davor lasse ich die Klassen mit dem O/R Mapper generieren. Erstelle also ein neues Element (LinkToSQL) und ziehe hier aus der vorhandenen Datenbankverbindung die Tabellen rein, die ich nachher über den DataContext ansprechen kann.

Abfrage für einen Aufruf ist z:B.

  
var query = from s in mietCon.Standort select s;
dataGridViewStandort.DataSource = query;

Der generierte SQL Code scheint ok zu sein, daher wundere ich mich, dass die zusätzlichen Spalten erscheinen.

@Eizo: Mir fehlen halt auch die korrekten Bezeichnungen 😦
Aber die im Code oben zu sehen ist, binde ich die Variable für die Abfrage direkt an das GridView.

02.07.2015 - 16:17 Uhr

verwendetes Datenbanksystem: SQL Server 2008

Juhuu...

Also bei meiner Verwaltung habe ich mehrere Tabellen.
Jede Tabelle ist editierbar mit einem eigenen DateGridView, welche alle in einem TabControl sind.
Funktioniert ganz gut soweit.
Bei der Planung haben wir zuerst das Datenbankmodell entworfen und die Beziehungen festgelegt.

Mein Problem ist nun, dass ein Gridview eine zusätzliche Spalte aus der abhängigen Tabelle anzeigt, darin aber keine Daten, sondern das Objekt.

Die Objektklassen habe ich mittels O/R Designer erstellen lassen, d.h. die Tabellen reingezogen, die Beziehungen hat es einwandfrei mit abgebildet.

Beispiel:

Tabelle "Schrank" besteht aus:
SchrankNr (PK)
StandortNr

Tabelle "Standort" besteht aus:
StandortNr (PK)
Bezeichnung

Alles nvarchar(50).

Beziehung:
Schrank.StandortNr <<--->Standort.StandortNr

Heist also, ohne den entsprechenden Eintrag in Standort ist der Eintrag StandortNr in Schrank nicht möglich. Soll auch so sein.

Starte ich nun das Programm und rufe das Gridview für Standort auf, habe ich die Spalten StandortNr und Bezeichnung. Gut so.

Rufe ich das GridView für Schrank auf, so habe ich die Spalten:
SchrankNr
StandortNr - und
Standort.

Gebe ich Ordnungsgemäß die Standortnummer ein, so steht in der Spalte "Standort" Klasse.Standort (Klasse hier eben mein Objekt).

So.
Die Daten sind per linq ans GridView gebunden.

Ich kann mir vorstellen, dass es was mit der Beziehung zu tun hat, aber warum steht nur "Standort" hier und wie kann ich wenigstens die Standort.Bezeichnung in der Spalte anzeigen?
Und warum macht das GridView dies überhaupt?

01.07.2015 - 11:45 Uhr

Warum erstellst du keine AD Gruppe, gibt dieser die Zugriffsrechte und legst alle Benutzer die dieses Programm nutzen dürfen in die AD Gruppe...

Und schon hättest du dein Problem sauber gelöst!

Stimmt!
Einfachste Lösung.

01.07.2015 - 09:26 Uhr

Das mit dem Datasource und Initial Catalog passt schon(habe ich oben falsch editiert). Problem ist nur, dass das Passwort im Connectionstring gespeichert wird im Klartext. Ansonsten geht es jetzt.

01.07.2015 - 08:56 Uhr

Also jetzt geht es.
Ich habe die Tabelle in der dbml Ansicht entfernt und neu reingezogen. Dabei hat er mich gefragt, ob ich die unsicheren Verbindungsdaten speichern möchte. Habe dann auf ja geklickt.
Das habe ich wohl beim ersten Mal nicht....

01.07.2015 - 08:34 Uhr

Den interessiert der Connectionstring gar nicht.

Dieser sieht so aus:

Data Source=DATENBANK;Initial Catalog=TABELLE;Persist Security Info=True;User ID=reader;Password=**********

Also vollkommen korrekt eigentlich.

Die Tabelle habe ich mit ADO.NET eingebunden und spreche es mit LINQ an.
D.h. es gibt eine dbml Datei, mit dieser werden ja automatisch die Klassen erstellt.

Die Verbindung wird dann mit folgendem Code geöffnet:


 USERSDataContext userCon = new USERSDataContext();

01.07.2015 - 08:14 Uhr

verwendetes Datenbanksystem: SQL Server 2008

Guten Morgen.
In meinem kleinen WIndows Progrämmchen mit .NET 4.5/Visual Studio Ultimate 2013
erstelle ich eine neue Datenbankverbindung zu unserem Datanbankserver auf eine bestimmte Datenbank mit einem extra hierfür erstellten SQL Benutzer.

Da ich Adminrechte habe, funktioniert das Programm auf meinem Rechner auch außerhalt der Entwicklungsumgebung.
Beim Nicht-Admin-Kollegen allerdings kann keine Verbindung zur Datenbank hergestellt werden, da das Programm immer den Windows-Anmeldename für die Verbindung nimmt.
Meldung:

Fehlermeldung:
Cannot open Database "DATENBANK" requested by the login. The login failed. Login failed fpr user "DOMÄNE\windowsbenutzer".

Die Verbindungsdaten, ergo den SQL Benutezr habe ich extra im Programm gespeichert, bzw. extra in der App.config den ConnectionString entsprechend angepasst.

Kleiner Hinweis: Es ist noch eine Zweite Datenbank auf einem anderen Server beteiligt, mit diesem klappt die Verbindung mit dem SQL Benutzer.

Liegt das an meinem Programm? Oder an der Datenbank?
Any ideas?

04.09.2014 - 16:27 Uhr

Vielen Dank, mal. Manchmal kann die Lösung so einfach sein. Meld mich wieder, muss los.

04.09.2014 - 13:15 Uhr

du willst also die Einträge aus dem Dictionary, deren Keys nicht in kuList vorkommen, richtig?

Nee, ich möchte die Einträge die in kuList vorkommen auch in diffDic haben - hier sind es viele mehr.

Aber eigentlich ist es noch viel komplizierter. Auf kuList gibt es eine Ergebnismenge, und aus dieser muss mit diffDic verglichen werden, da ich dann so an die diffDic.Values herankomme, welche ich benötige.

Aber noch eigentlicher ist es noch anders:

Ich habe kuList und daraus die Ergebnismenge mit:


 var query = from int k in kuList
                            group k by k into g
                            where g.Count() == 3
                            select new { identnr = g.Key } ;

D.h. in query stehen die Daten die ich benötige.
Das sind Kundennummern.

In einer DataTable stehen zwei Spalten mit der Kundennummer und einer weiteren ID.
An diese ID muss ich über die Kundennummer ran.

Direkt per SQL habe ich das auf dem SQL Server schon lange gelöst, das soll aber ein Programm werden.

Habe schon Versuche gemacht mit linq, das ist aber auch irgendwie kompliziert, darum habe ich es mit den Arrays versucht.

Also sprechend: Select datatable.adresse from datatable where query = identnr.datatable 😁

Das könnte so aussehen:

  var x = from Dictionary<string, string> d in diffDic where d.ContainsKey(query.ToArray()) select d.Values;

Nur meckert er natürlich, da er mit query nichts anfangen kann und ich nicht weiss wie ich das umwandeln muss...

Edit: so gehts auch nicht:


var x = from Dictionary<string, string> d in diffDic
                        group d by d into l
                        where l.Keys.Intersect(query.ToArray())
                        select new { bla = l.Key };

Edit:
Der Einfachheit halber hab ich es jetzt so gelöst, aber dauert natürlich Ewigkeiten:



                foreach (var item in diffDic)
                {
                    foreach (var item2 in query)
                    {
                        if (item.Key == item2.identnr.ToString())
                        {
                            diffDic2.Add(item.Key, item.Value);
                            Console.WriteLine(item.Key);
                        }
                    }

                }

04.09.2014 - 10:46 Uhr

Hallo, ich stehe mal wieder auf dem Schlauch:

Ich habe ein Dictionary <string,string> diffDic und ein ArrayList kuList(string)

Nun muss ich prüfen, welche diffDic.Keys in kuList vorhanden sind. das bedeutet in diffDic sind sehr viel mehr einträge vorhanden als on kuList. Mit dem Vergleich von diffDic.Keys und kuList filtere ich diejenigen aus, die in diffDic zu viel sind.
Nun habe ich die Ergebnismenge und ich kann auf die diffDic.Value zugreifen, bzw. mit diesen weiterarbeiten.

Würde das so gehen ?

  var diffErg= diffDic.Keys.Except(kuList.ToArray());

In diffErg habe ich nun aber die keys, welche ich nun wieder mit diffDic vergleich muss um an diffDic.values heranzukommen.

Also habe ich es mit Schleifen und mit linq versucht:


var x = from Dictionary<string, string> d in diffDic where d.Keys.Except(kuList.ToArray()) select d.Values;

Aber die where Bedingung ist so ja ein Bool, geht also auch nicht.
Wie kann ich das lösen?

22.05.2014 - 09:10 Uhr

Ok dankeschee.

22.05.2014 - 08:48 Uhr

Öhm und das mit dem Zoomen ist darin auch beschrieben?
Habe bisher mit Grafikzeugs noch nichts gemacht..betrete da Neuland

22.05.2014 - 08:30 Uhr

Hallo Gemeinde.

Ich suche einen .NET TIFF Library die Tiffs anzeigen und darin blättern kann.

Die Zentrale Funktion muss aber sein, dass man mit der Maus einen Bereich im TIFF aufzieht, welcher dann vergrößert dargestellt wird.
Bei Doppelklick muss dann wieder verkleinert werden.

Ich sollte das mit Windows Forms realisieren auf Basis von .NET 4.5
Darf auch was kosten.
Grüßle und danke für Tips.

24.04.2014 - 14:29 Uhr

Resourcen kosten ja heutzuage nichts mehr...

24.04.2014 - 14:19 Uhr

"Man" liest halt, dass es Resourcenschonend sein soll...nur deshalb.
Im Moment kommt die Timeoutzeit von 60 Minuten schon noch zum Tragen, später dann aber sicher nicht mehr.

Also dann, wenn es aus Deiner erfahrenen Sicht her keinen dringenden Grund gibt, stelle ich die Zeit weit hoch und auf Terminate. Ich merke eh keinen Unterschied zu einer normalen Anfrage und einer zum terminierten Service...zumindest im Moment nicht, da eh nur geringe Datenmengen verschickt werden.

24.04.2014 - 14:08 Uhr

Liebe Community.
Mein erster WCF Service ist nun als Pilot im fast-produktiven Einsatz 😃

Funktioniert prima, nur ein Problem habe ich:
Seit dem IIS8.5 kann man für den Applicationpool unter Idle Time-Out wählen zwischen Terminate und Suspend.

Was ich nun gelesen habe, sollen die Resourcen bei der Einstellung "Suspend" zwar recycelt, also freigegeben werden, aber beim ersten Aufruf des Service schneller wieder verfügbar sein.

Meine Feststellung ist nun, dass der Service bei der Einstellung "Suspend" nicht mehr aufwacht.
Bei Terminate gehts.

Appfabric spuckt die Meldung aus:

System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:01:00'. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host

Oder:

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'System.ServiceModel.Dispatcher.ChannelDispatcher'.

Also das Object, alias Service schläft und wacht nicht wieder auf.

So sieht mein Quellcode im Client aus:

 proxy = new ABServiceClient();
                    proxy.Open();
                    _rueckgabe = proxy.GetOdbcData(_select, true);
                    proxy.Close();

Also ganz normaler Standard.
Muss ich den Service irgendwie anders aufrufen oder aufwecken?

Oder ist die Vorgehensweise grundsätzlich falsch?

Vielen Dank!

08.04.2014 - 14:43 Uhr

Hallo
Der Dienst liegt, wie auf der msdn Seite beschrieben im /Debug Verzeichnis.
Vielleicht muss ich den mal von woanders aufrufen?
Ich probiers mal.

EDIT: Ich habe nun die .exe nach c:\ordner kopiert und von dort installiert, nun geht es 😃

08.04.2014 - 08:31 Uhr

Moin.

nein ich lade keine Config Datei.
Es ist eine ganz normale Hallo-Welt WCF Anwendung, bei der es zwar eine appconfig Datei gibt, aber die wird ja nicht direkt von mit referenziert...

08.04.2014 - 08:13 Uhr

Hallo lieben Forum.
Unter dieser Anleitung habe ich einen Windows Dienst erstellt und mit installutil installiert. Möchte ich diesen nun starten bekomme ich die Fehlermeldung:

Der Dienst "Service1" wurde aufgrund folgenden Fehlers nicht gestartet:
Das System kann die angegebene Datei nicht finden.

Schaue ich mir den Dienst genauer an, sehe ich aber daß der Pfad zur .exe Datei stimmt!
Trotzdem kann der Dienst nicht gestartet werden, die Windows Firewall ist aus!

Ich hatte das schon einmal mit einer anderen Dienstanwendung.

Weiss jemand woran das liegen kann?

18.03.2014 - 10:33 Uhr

Hi und vielen Dank nochmal.

Jetzt Funktionierts!
Danke!

Im Gesamten siehts jetzt so aus, für die Nachwelt:

 private void button2_Click(object sender, EventArgs e)
        {
            var SW_MAXIMIZE = 3;
            var SW_RESTORE = 9;
            var SHOWNORMAL = 1;
            var SW_SHOW = 5;
            bool isPruefNrOpen = false;

            SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
            string filename;
          
            foreach (SHDocVw.InternetExplorer ie in shellWindows)
            {
                filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
                if (filename.Equals("iexplore"))
                {
                    string[] urlParts = (ie.LocationURL.ToString()).Split('/');
                    string website = urlParts[3];
                    if (website.Contains("pruefn"))
                    { 
                        SetForegroundWindow((IntPtr)ie.HWND);
                        ShowWindow((IntPtr)ie.HWND, SW_MAXIMIZE);
                        isPruefNrOpen = true;
                        new TabActivator((IntPtr)ie.HWND).ActivateByTabsUrl("http://localhost/pruefn/");                      

                    };
                }
            }          
               if (!isPruefNrOpen)
               {
                   Process.Start("IExplore.exe", "http://localhost/pruefn/");
               }
        }
17.03.2014 - 15:20 Uhr

Hallo und vielen Dank.

das scheint zu funktonieren bis auf eins:
Das richtige Browserfenster wird nun hervorgeholt, nicht aber der aktuelle Tab:
Das Handle rufe ich mit ie.HWND auf, das sollte eigentlich das Handle des Tabs sein.

  foreach (SHDocVw.InternetExplorer ie in shellWindows)
            {
                filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
                if (filename.Equals("iexplore"))
                {
                    string[] urlParts = (ie.LocationURL.ToString()).Split('/');
                    string website = urlParts[3];
                    if (website.Contains("pruefn"))
                    {
                        sdOpen = true;
                        SetForegroundWindow((IntPtr)ie.HWND);

                        ShowWindow((IntPtr)ie.HWND, SW_MAXIMIZE);
                        isPruefNrOpen = true;
                    };
                }
            }
17.03.2014 - 14:53 Uhr

Hello.
Ich habe ein Progrämmchen, welches alle Tabs des Internet Explorers auslesen soll und identifizieren soll.
Identifizieren in dem Sinne, dass es prüfen soll, ob eine bestimmte Webseite offen ist oder nicht.
Wenn Ja, dann soll diese in den Vordergrund geholt werden, wenn nicht soll eine neue Instanz des IE geöffnet werden.
Hierzu lese ich den Maintitel des Prozesses aus.

Zum Teil funzt es, aber nur wenn die gesuchte Webseite den Focus hat, d.h. wenn der Tab mit der Webseite aktiv ist.
Selbst wenn ich dann den IE minimiere, funktioniert es.

Hat der IE allerdings mehrere Tabs offen und besagter Tab ist nicht aktiv, dann ist der MainTitle leer und ich erkenne die Webseite nicht und öffne daher eine neue Instanz des IE mit der Seite.

Ziel soll sein, dass ich die Webseite auch im inaktiven Zustand identifizieren kann und entsprechend aktivieren kann- einfach wenn schon geöffnet, aber inaktiv dann aktivieren, wenn noch nicht offen, öffnen 😃

Hier der Code:

  System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName("IEXPLORE");

            foreach (System.Diagnostics.Process proc in procs)
                if (proc.MainWindowTitle.Contains("Prüfnummer"))
                {
                    SetForegroundWindow(proc.MainWindowHandle);
                    
                    ShowWindow(proc.MainWindowHandle, SW_MAXIMIZE);
                    isPruefNrOpen = true;
                }


            if (!isPruefNrOpen)
            {
                Process.Start("IExplore.exe", " http://localhost/pruefn/");
            }
07.03.2014 - 16:05 Uhr

Ok dann muss ich also dem Templatefield den Placeholder auch programmatisch zufügen und jedes Mal mit einer anderen ID, dann kann ich diesee ID später wieder referenzieren,z.b. mit einer laufenden Nummer.
Das kriege ich hin, danke für den Schubser.

07.03.2014 - 15:03 Uhr

Hallo Community.
Jetzt bin ich langsam am verzweifeln, da ich es schon seit Stunden versuche und wahrscheinlich nur ein Brett vor dem Kopf habe.

Also ich habe ein ganz normales GridView, welches deklarativ erstellt wird.
In diesem sind verschiedene BoundFields und Templatefields.

In das Templatefield habe ich nun ein Placeholder eingebaut, welcher im RowDataBound Event mit einer DropdownList bestückt werden soll.

Leider wird nur die letzte Reihe auf der Seite entsprechend bestückt und nicht jede Row.

Hier mal ein Stück Code:

Das ist das Templatefield, der PlaceholderdivFavoriten soll gefüllt werden:

 <asp:TemplateField HeaderText="Anzahl"  >
               <ItemStyle Wrap="False" />
                <ItemTemplate >
                    <asp:TextBox ID="txtMenge" runat="server" Width="50"  MaxLength="4" ClientIDMode="Static" ></asp:TextBox>                                            
                    <asp:ImageButton ID="btnAddToWk" runat="server" ClientIDMode="Static" ImageUrl="~/Images/cart add.png" OnClientClick="getWarenKorb(this)" ToolTip="Zum Warenkorb hinzufügen" CssClass="marginright"/>
                    <asp:PlaceHolder ID="divFavoriten" runat="server">
                     
                    </asp:PlaceHolder>
                    <asp:ImageButton ID="btnAddFav" runat="server" ClientIDMode="Static" ImageUrl="~/Images/Favorite_add_32.png" OnClientClick="getFavoriten(this)" ToolTip="Zu Favoriten hinzufügen" />
                </ItemTemplate>   
            </asp:TemplateField>  

So hänge ich an das Templatefield die DropDownList an:
Hier im RowCreated Event, habe es aber auch schon im RowDataBound Event versucht.

 
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                PlaceHolder favPlaceholder = (PlaceHolder)e.Row.Cells[9].FindControl("divFavoriten");
                if (favPlaceholder != null)
                {
                    favPlaceholder.Controls.Add(dList);
                }
            }
        }

Die dList ist die fertige DropDownList.
Der Placeholder wird bei jeder Row gefunden, aber nur bei der letzten wird auch tatsächlich das Control angehängt...

What's wrong there?

18.12.2013 - 09:40 Uhr

Hallo Leute.

Ich habe ein GridView in der ASP.NET Winform Anwendung, welches per sqldatasource mit Daten aus der Datenbank versorgt wird.
Der SELECT Befehl ist getestet und liefer im SQL Manager genau 2931 Datensätze, was auch direkt im ERP so der Fall ist.

Auf der ASP.NET Seite jedoch werden im Gridview ohne paging nur 249 Datensätzen angezeigt, da kann ich machen was ich will.

Hier ein Teil der sqldtasource:

"SELECT      tuw.oa, 
            tuw.t_tg_nr, 
            teil.klassifiz, 
         ........
.......

AND   (ueberg_grp   = ?)" 
 OnSelected="SqlDataSource1_Selected" OnDataBinding="SqlDataSource1_DataBinding"   >           
        <SelectParameters>
            <asp:QueryStringParameter name="ueberg_grp" QueryStringField="GrpNr" Type="String"/>
        </SelectParameters>                    

Also das ? wird dann ersetzt durch einen Wert, das passt auch.

Teil des Gridviews:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"   OnRowEditing="GridView1_RowEditing" DataSourceID="SqlDataSource1" ForeColor="#333333" GridLines="None" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnSelectedIndexChanging="GridView1_SelectedIndexChanging" HorizontalAlign="Left" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" OnSorted="GridView1_Sorted" OnDataBound="GridView1_DataBound">

Ich habe auch schon ein "nacktes" GridView reingezogen und es mit der datasource versorgt, leider dasselbe. Es scheint also schon eher an der Datenquelle zu liegen.

Wobei, wenn ich den Befehl kopiere und in den SQL Manager einfüge, werden alle 2931 Datensätze angezeigt....

Also der Befehl kann auch nicht falsch sein.
Woran kann das liegen?

PS: Es ist alles deklarativ in der .aspx Seite.
Wie kann ich den generierten Befehl der sqldatasource im Codebehind kontrollieren?

Edit: Also es liegt eingeutig an dem querystringparameter, mit dem scheint was nicht zu stimmen. ersetze ich das Fragezeichen im Befehl direkt mit dem entsprechenden Wert, werden alle Datensätze angezeigt.
Umso interessanter wäre es zu wissen, welchen Befehl genau die sqldatasource an die Datenbank sendet....

EDIT2:
Es war tatsächlich der Querystring der Fehlerhaft war, hat sich somit erledigt und ich habe mal wieder zu früh geschrieben...naja bald ist Weihnachten.
In diesem Sinne wünsche ich Euch alles ein fröhliches Fest...und ein gutes neues Jahr.

20.09.2013 - 13:06 Uhr

Und wie ??

29.07.2013 - 08:33 Uhr

Hey, jetzt gehet es. aber frag bitte nicht warum...wahrscheinlich ein Fehler in der SQL Abfrage?
Aber danke für den Hinweis mit dem OR-Manager, werde ich mir mal ansehen.

@Abt: ich gelobe Besserung.

29.07.2013 - 07:51 Uhr

Guten Morgen. Ja so habe ich das auch versucht, leider dasselbe. "Meine Lösung" habe ich sogar vom Assistent bauen lassen...

26.07.2013 - 13:01 Uhr

verwendetes Datenbanksystem: Informix

Hallo Community.

ich versuche schon die ganze Zeit per SqlDataSource und einer Datalist einen Datensatz auszugeben,welcher die Daten aus dem QueryString holt.

<asp:SqlDataSource ID="SqlDataSource2" runat="server" DataSourceMode="DataReader"
         ConnectionString="<%$ ConnectionStrings:ABSConnectionString %>" ProviderName="<%$ ConnectionStrings:ABSConnectionString.ProviderName %>" 
         SelectCommand=  "SELECT art, klassifiz, kurzname, produktgrp FROM teil WHERE ((ident_nr = ?) AND (art = ?))">
         <SelectParameters>
             <asp:QueryStringParameter Name="ident_nr" QueryStringField="ProductID" Type="string" />
            
             <asp:QueryStringParameter Name="art" QueryStringField="TArt" Type="Int32" />
            
         </SelectParameters>
        
     </asp:SqlDataSource>

Das Datalist:

 <asp:DataList ID="DataList1" runat="server" CellPadding="4" DataSourceID="SqlDataSource2" ForeColor="#333333" DataKeyField="art">
        <AlternatingItemStyle BackColor="White" />
        <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <ItemStyle BackColor="#FFFBD6" ForeColor="#333333" />
        <SelectedItemStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
        <ItemTemplate>
             art:
            
            <asp:Label ID="artLabel" runat="server" Text='<%# Eval("art") %>' />

             <br />
             klassifiz:
             <asp:Label ID="klassifizLabel" runat="server" Text='<%# Eval("klassifiz") %>' />
             <br />
             kurzname:
             <asp:Label ID="kurznameLabel" runat="server" Text='<%# Eval("kurzname") %>' />
             <br />

             produktgrp:
             <asp:Label ID="produktgrpLabel" runat="server" Text='<%# Eval("produktgrp") %>' />

             <br />

             <br />

        </ItemTemplate>
        
     </asp:DataList>

Die Url die übergeben wird:

http://localhost:41157/xxxx.aspx?ProductID=00000000000000071788&TArt=6

Bei einem Querystring, also nur ProductID funktioniert es einwandfrei!
Sobald ich aber zwei angebe ist das DataList leer.
gebe ich die zwei Parameter direkt in der WHERE Klausel ein, funktioniert es auch.

Woran kann das liegen, hat jemand eine Idee?

26.07.2013 - 09:41 Uhr

Ich nutze webforms und ich kenne beide Ansätze ziemlich gut, da ich bereits mit Webforms und MVC gearbeitet habe, wobei mir MVC viel lieber ist.
Für dieses Projekt nutze ich aus gutem grund aber Webforms.
Das einzige ist, daß ich bisher noch nie mit Datenbanken gearbeitet habe, da wir bisher mit Windows Sockets alles gemacht haben. Daher die Frage, wohin ich die Daten aus der DB am besten speicheren. Wenn nicht DataSet, was dann?

26.07.2013 - 09:10 Uhr

da Du vorher nicht/kaum mit ASP.NET (WebForms/MVC) gearbeitet hast.
Mach ein paar Tutorials,[/url] 1.1 und 1.1.1

Korrekt.
Den Lifecycle kenne ich.
Im Prinzip hätte eine Aussage wie "nimm ein DataSet" gereicht, dann bin ich mir zumindest sicher, daß ich auf der richtigen Spur bin. Arbeit soll mir hier keiner abnehmen, nur eine Richtung vorgeben, den Rest mache ich dann selbst.

26.07.2013 - 08:32 Uhr

verwendetes Datenbanksystem: Informix (derzeit noch)

Liebe Community.
Ich bewege mich nun auf neuen Wegen und mache nun ASP.NET Anwendungen mit Datenbankanbindung.
Da ich bisher keine bis wenig Erfahrung habe stelle ich die Frage nach dem Besten Weg mal hier rein an die erfahrenen Programmierer.

Also zum Thema: es soll eine kleine Warenkorb Anwendung werden.
Den warenkorb an sich speichere ich dann in der Session, die daten hieraus kommen dann in einer XML Datei, welche dann weitergeleitet wird.
das heist also, ich sollte auf einzelne Datensätze zugreifen können, bestenfalls per jQuery? (nicht immer Postback)
Alles für interne Zwecke.

  1. Es sollen die Kategorien aus der Datenbank ausgelesen werden, insgesamt vier Stück.
    Das funktioniert bereits per DataList.

  2. Klicke ich auf eine Kategorie sollen alle Produkte dieser Kategorie auf mehreren Seite angezeigt werden (Paging).
    Und jetzt kommt das schwierige:
    Oben soll eine Suchleiste sein, die diese Datensätze (ca 2500) durchsucht.
    Dabei soll natürlich nicht nach dem Ganzen Wort gesucht werden, sondern auch Teile davon, z.b.
    "Schleif+" dann soll alles aufgelistet werden, was mit "Schleif" anfängt.

Bestenfalls geht das per Liveansicht, also daß die Daten bereits während dem Tippen eingeschränkt werden, ist aber keine Voraussetzung.

Nun die Fragen:

  • In welches Objekt lese ich am Besten die Datensätze rein?(Hauptfrage) Welches Objekt ist flexibel genug um die Anforderungen zu erfüllen?
  • Wie gestalte ich die Suche, darf auch per Postback geschehen.

Vielen Dank schonmal für tips von den Profis.

24.07.2013 - 13:43 Uhr

Genau damit habe ich es ja versucht, geht nicht, bekomme kein Token. Wird wohl noch was an der Installation im Argen liegen, dazu muss ich aber auf unseren Spezi warten.

24.07.2013 - 11:36 Uhr

Doch, darum versuch ich ja die app selbst zu hosten und nicht in SP...und genau da hakt es ja

23.07.2013 - 15:59 Uhr

Hallo Ihr lieben. Wir haben eine SP2013 Teststellung und ich möchte dafür eine kleine Hello World App "Entwickeln".
Also habe ich mir die Office dev. Tools 2013 installiert und kann nun mit VS2012 auf die SP-App templates zugreifen.

Die Verbindung zu Entwicklungsseite auf dem SP-Server funktioniert bei der Einrichtung einwandfrei, auch wird die App korrekt installiert. Nur leider bekomme ich kein Token von der Webseite:

Fehlermeldung:
The parameter 'token' cannot be a null or empty string

Fehlermeldung:
Ausnahmedetails: System.ArgumentException: The parameter 'token' cannot be a null or empty string

Quellfehler:

Zeile 97: {
Zeile 98: JsonWebSecurityTokenHandler tokenHandler = CreateJsonWebSecurityTokenHandler();
Zeile 99: SecurityToken securityToken = tokenHandler.ReadToken(contextTokenString);
Zeile 100: JsonWebSecurityToken jsonToken = securityToken as JsonWebSecurityToken;
Zeile 101: SharePointContextToken token = SharePointContextToken.Create(jsonToken);

An diesem Fehler mache ich schon den ganzen Mittag rum, leider ohne Erfolg. VS2012 läuft auch mit Adminrechten.

Google Empfehlungsen habe ich schon alle ausprobiert, nichts hat geholfen.
Auch wenn ich die installierte app ohne debugger aufrufe geht es nicht.
Die app ist eine automatic Hostet app. Eine in SP gehostete App läuft, da diese ja im Kontext von SP läuft, dafür kann ich aber keinen Servercode ausführen, was es wiederum sinnlos macht.

Was läuft hier falsch?
vielen lieben Dank schonmal

12.07.2013 - 09:42 Uhr

Ja, habe ich nun auch so gemacht und es funktioniert auch mit der Abfrage nach IsDBNUll.
Vielen Dank Euch allen.

12.07.2013 - 09:42 Uhr

Alles klar, vielen Dank Euch allen!