Giter VIP home page Giter VIP logo

hdm-wim-devlab's Issues

[Event] SharedLib vereinfachen und Helper-Klassen hervorheben

Die SharedLib soll folgende Funktionen bieten:

## Pseudocode
    import SubscriptionHelper from SharedLib
    import PublishHelper from SharedLib    
    import Event from SharedLib

    # Modulteams sollen Message / Event auf Basis der geteilten Klasse erstellen können
    Event event = new Event();
    event.setData({...})
    # Publish to PubSub
    PublishHelper.publish(topicId, event);

    # Events abfragen
    # message kommt direkt von pubSub
    SubscriptionHelper.subscribe(message => {
        # Eventklasse übernimmt Mapping von message "json" auf entsprechende Attribute
        Event event = new Event(message);
        # Mit Event arbeiten...
        event.getData();
        event.getAttributes();
    })

SemRep => GUI (Format Dokumentenvorschläge)

Die Dokumente Vorschläge sollen in folgendem Format erfolgen:

Infos:

Das Format der Einzelnen Vorschläge sollte folgendermaßen aussehen:

 
{"name":"Dokument1","prio":1,"DokuTyp":"gdoc","link":"https://docs.google.com/document/d/1bkLCvEBX56OBrECe89SFxpaqhlfQfZtOUNHNxM2Rlmc/edit","folder":"Mercedesprojekt"}
 
{"name":"Dokument2","prio":0,"DokuTyp":"gsheet","link":"https://docs.google.com/document/d/1bkLCvEBX56OBrECe89SFxpaqhlfQfZtOUNHNxM2Rlmc/edit","folder":"Mercedesprojekt"}

Insgesamt sollten die einzelnen Vorschlags-JSONs in ein großes JSON verpackt werden.

nach folgendem Beispiel (die Zahl hinter sug wird hochgezählt):

var broadcast = function() {
 
 var infoJSON = JSON.stringify({ "name":"Dokument1", "prio":1, "DokuTyp":"gdoc", "link": "https://docs.google.com/document/d/1bkLCvEBX56OBrECe89SFxpaqhlfQfZtOUNHNxM2Rlmc/edit", "folder": "Mercedesprojekt" } );
   var infoJSON2 = JSON.stringify({ "name":"Dokument2", "prio":0, "DokuTyp":"gsheet", "link": "https://docs.google.com/document/d/1bkLCvEBX56OBrECe89SFxpaqhlfQfZtOUNHNxM2Rlmc/edit", "folder": "Mercedesprojekt" } );
 var json = JSON.stringify({
   sug1: infoJSON, sug2: infoJSON2
 });
 
 

Am Anfang werden alle relevanten Dokumente initial an die GUI geschickt. Sich später ändernde Prioritäten erfolgen durch ein erneutes Senden einzelner Vorschläge an die GUI

[Alle] Komplexe Events identifizieren

  • Dokument vermutlich relevant Event(Dokument angeboten) + Event(Dokument geklickt)
  • Kontext identifizieren Auch auf Basis von angeklickten Dokumenten (Semrep: Dokument gehört zu folgendem Projekt/Kontext --> Mehrere Vorschlage zu einem Projekt --> Event: Kontext ist "HighNet")
  • Kontext identifizieren auf Basis von Person (Verfasste Dokumente, Hat aufgerufen, Favorisiert, Projekt) arbeitet an --> Macht ML (@LepiorzDaniel @bjoernZimmermann)
  • Kontext / Aktualität identifizieren auf Basis des Erstelldaten vorgeschlagener Dokumente (--> GUI kann Button anbieten "neues Dokument anlegen")
  • Kontext identifizieren auf Basis der meist genutzten Keywords
    --> Definition "Kontext" ("es geht gerade um Videokonferenz", "es geht gerade um Projekt HighNet",..)
  • DocumentHighlyRelevantEvent User klickt binnen weniger Sekunden mehrfach auf denselben Vorschlag

  • Favoriten des Users identifizieren auf Basis der Feedbacks (User ruft gerne auf...) --> Aufgabe ML
  • Sessionende / Gesprächsende identifizieren (Abgleich mit angemeldeten Usern)
  • Passiven Logout identifizieren (GUI sendet Ping Event in definiertem Intervall)
  • Passiver Logout + !Sessionende + Aktiver Login (GUI kann Wiedereinstieg anbieten)
  • Aktuelle Teilnehmer wird ausgelöst nach jedem Login / Logout

  • Google Calender identifizieren, um Vorschlagsevent zu generieren (Tokens werden in einem einzelnen Event gesendet: "appointment", "next meeting") --> Aufgabe Speech (Nutzer spricht von Google Calendar) -> GUI zeigt auf dieser Basis Link an
  • Google Drive identifizieren, um Vorschlagsevent zu generieren --> Aufgabe Semantische Repräsentation (@bjoernZimmermann @mateos-alliaj)

--
Komplexes Event: Identifizierung von Pattern beim auftreten von Events.

An alle: Bitte ergänzen, welche komplexen Events für Eure Gruppe relevant sein kann. Einfach kommentieren. Ich aktualisiere dann die Liste.

[Alle] Topics definieren

Wir sollten gemeinsam entscheiden, welche Topics benötigen. Topics sind unsere Kommunikationskanäle über die später Events ausgetauscht werden.

Beispiele:

  • FeedbackGui
  • Insights
  • Offers
    ....

Die aktuelle Liste könnt Ihr in der README.md nachlesen.

[Alle] Topics festlegen

Da wir der Kommunikation zwischen den Gruppen über PubSub immer näher kommen, müssen wir die Topics festlegen. D.h. Wer an welche Topic publisht und wer welche Topic empfängt.

Bisher laufen alle Gruppen auf topic-1 zum testen.

Implementierung PubSub:

  • SemRep
    • Senden
    • Empfangen
  • Speech
    • Senden
    • Empfangen
  • GUI
    • Senden
    • Empfangen
  • CEP
    • Senden
    • Empfangen
  • ML
    • Senden
    • Empfangen

REST für [GUI]

Weil die Frage aufkam wie ihr über REST ein Event publishen könnt:

(5) veröffentlichen von Events mit Hilfe der REST Schnittstelle.

Endpointurl: https://hdm-wim-devlab.appspot.com/publish

ParameterName ParameterValue
topic string
payload string
attributes string

Beispiel:
https://hdm-wim-devlab.appspot.com/publishtopic=topic-1&payload=blubb_1&attributes=%7B%22EventType%22%3A%22insight%22%2C%22EventSource%22%3A%22user-interface%22%7D

Value des attributes Parameters ist ein url codierter json string : {"EventType":"insight","EventSource":"user-interface"} => %7B%22EventType%22%3A%22insight%22%2C%22EventSource%22%3A%22user-interface%22%7D

Hinweis: Es findet keine Prüfung statt, ob die topic existiert. Diese bitte den Constants entnehmen.

An dem Publishendpoint wird sich eher nichts ändern, allerdings arbeite ich gerade dran mit Hilfe von Push Events zu empfangen. Werde dann in dem Issue immer ein Update schreiben und die doku aktualisieren

[MACHINE LEARNING] Attribute aller Events festlegen

Hallo Machine Learning

bitte ergänzt für alle aufgeführten Events die Attribute durch Edit. Die Schreibweise ist erstmal unwichtig, wir normieren die Attribute in der Konstantenklasse. Falls Events fehlen, bitte um direkte Rückmeldung. Eine Liste aller Events inkl. Aufbau ist hier einzusehen.

LearnEvent

erstellt durch ML; Kontext zwischen Personen oder Dokumenten zu Projekten; published in Topic: Constants.PubSub.Topic.INSIGHTS

Attribute

  • userId: String
  • documentId: String
  • projectId: String
  • documentAffiliation: Boolean (true)
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.MACHINE_LEARNING
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.LEARN

[EVENT] Attribute aller Events festlegen

Hallo CEP

bitte ergänzt für alle aufgeführten Events die Attribute durch Edit. Die Schreibweise ist erstmal unwichtig, wir normieren die Attribute in der Konstantenklasse. Falls Events fehlen, bitte um direkte Rückmeldung. Ein Liste aller Events inkl. Aufbau ist hier einzusehen.

UserContextEvent

erstellt durch CEP; die Nutzerinformationen lassen auf einen Projekt-Kontext schließen; published in Topic: Constants.PubSub.Topic.INSIGHTS

Attribute

  • userIds: Array(String)
  • userNames: Array(String)
  • projectId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.EVENT
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_CONTEXT

DocumentContextEvent

erstellt durch CEP; die Dokumentinformationen lassen auf einen Projekt-Kontext schließen; published in Topic: Constants.PubSub.Topic.INSIGHTS

Attribute

  • documentIds: Array(String)
  • documentNames: Array(String)
  • projectId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.EVENT
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.DOCUMENT_CONTEXT

DocumentRelevantEvent

erstellt durch CEP; ein Nutzer hat ein bestimmtes Dokument angeklickt; die SR kann die Verbindung höher gewichten; published in Topic: Constants.PubSub.Topic.INSIGHTS

Attribute

  • userId: String
  • documentId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.EVENT
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.DOCUMENT_RELEVANT

DocumentHighlyRelevantEvent

erstellt durch CEP; ein Nutzer hat ein bestimmtes Dokument mehrfach angeklickt; die SR kann die Verbindung höher gewichten; published in Topic: Constants.PubSub.Topic.INSIGHTS

Attribute

  • userId: String
  • documentId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.EVENT
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.DOCUMENT_HIGHLY_RELEVANT

SessionEndEvent

erstellt durch CEP; es ist kein User mehr in der Session vorhanden; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

Attribute

  • sessionId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.EVENT
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.SESSION_END

UserInactiveEvent

erstellt durch CEP; ein User ist inaktiv (passiver Logout); published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

  • userId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.EVENT
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_INACTIVE

Event -> SemRep

Kontext:
1.) SemRep erhält den folgenden Input von SpeechTokenizer:
input[0] = "793dnj"; // sessionID
input[1] = "2"; // userID
input[2] = "Videokonferenz"; // context
input[3] = "milestone"; // keyword
(input[n] = "XY"; // keyword)

2.) Daraufhin erstellt SemRep den folgenden RichToken:
SessionID: 793dnj
TimeStamp: 2017-06-07 16:00:51.03
Person: Person=Kristjan_Alliaj, ID=2, Klasse=Externer_Mitarbeiter, NamedIndividual, Vorname=Kristjan, Nachname=Alliaj, Mail=[email protected], Person_arbeitet_an_Projekt=HighNet, Person_hat_Projektrolle=Entwickler, Person_gehoert_zu_Abteilung=IT, Person_hat_Dokument_verfasst=Aufgabenliste-HighNet, Person_ruft_Dokument_auf=KickOff-HighNet, Aufgabenliste-HighNet, Person_favorisiert_Dokument=KickOff-HighNet
Dokument_0: Dokument_3=Projektplanung-HighNet, Klasse=Dokument, NamedIndividual, Dok_Name=Projektplanung, Dok_ID=1gnH6sv3VqGEveSSf0SoS7dJqWaUyUnZm6-QrdiH7vCM, Dok_URL=https://docs.google.com/document/d/1gnH6sv3VqGEveSSf0SoS7dJqWaUyUnZm6-QrdiH7vCM/edit, Dok_Erstelldatum=2017-04-12T17:33:00, Dok_Updatedatum=2017-04-29T14:05:00, Dok_Version=1.1, Dok_Typ=Google Docs, Dokument_verfasst_von_Person=Mateos_Alliaj, Haruki_Murakami, Lisa_Meier, Kristjan_Alliaj, Björn_Zimmermann, Ivan_Kurtovic, Donald_Trump, Dokument_gehoert_zu_Phase=SpezifikationUndPlanung, Dokument_hat_Dokumentenkategorie=Textdokumente, Planungen, Praesentationen, Tabellen, Dokument_gehoert_zu_Projekt=HighNet, Big_Data_Diagnosis, BlackWater, Dokument_favorisiert_von_Person=Lisa_Meier, Mateos_Alliaj, Donald_Trump, Kristjan_Alliaj, Björn_Zimmermann, Haruki_Murakami, Ivan_Kurtovic, Dok_Keywords=planning, project_plan, project_planning, milestone, Big_Data, kickoff-HighNet, kickoff, to-do_list, list, tasks, costs, cost_planning, listing, report, finances, financial_report, Kontext=HighNet_project, Big_Data_Diagnosis_project, BlackWater_project
Projekt: ProjektID=1, ProjektName=HighNet, Projekt_gehoert_zu_Unternehmen=Star_Cars, Projekt_gehoert_zu_Abteilung=Research_and_Development, Projekt_hat_Projektmitglied=Mateos_Alliaj, Projekt_hat_Dokument=Meilensteine-HighNet

3.) Event identifiziert den Kontext und stellt diesen in der folgenden Struktur als Token bereit:
input[0] = "793dnj"; // sessionID
input[1] = "2"; // userID
input[2] = "HighNet_project"; // context
input[3] = "milestone"; // keyword
(input[n] = "XY"; // keyword)
Im Input Array wird der vorher "Videokonferenz" Kontext aktualisiert. Hierfür wird das Attribut "Dokument_gehoert_zu_Projekt" (im obigen Beispiel = HighNet) aus dem RichToken herangezogen. Alle Dokument-Objekte werden betrachtet und das häufigste Projekt dann ausgewählt. Dem identifizierten Projekt (HighNet) wird aber noch der Zusatz "_project" angefügt. So erhalten wir den Kontext "HighNet_project". Also immer: identifiziertes Project + "_project"

4.) Event liefert ein Array zurück mit der Angabe, welche Dokumente den Identifizierten Kontext haben:
input[0] = "793dnj"; // sessionID
input[1] = "HighNet_project"; // context
input[2] = "1gnH6sv3VqGEveSSf0SoS7dJqWaUyUnZm6-QrdiH7vCM"; // Dok_ID
(input[n] = "XY"; // Dok_ID)

Message Generator zum Testen

Wir brauchen nen Generator der Messages generiert und diese dann unter den verschiedenen Topics veröffentlicht.

{
  "data": string,
  "attributes": {
    string: string,
    ...
  },
  "messageId": string,
  "publishTime": string,
}

source

[GUI] Attribute aller Events festlegen

Hallo GUI

bitte ergänzt für alle aufgeführten Events die Attribute durch Edit. Die Schreibweise ist erstmal unwichtig, wir normieren die Attribute in der Konstantenklasse. Falls Events fehlen, bitte um direkte Rückmeldung. Eine Liste aller Events inkl. Aufbau ist hier einzusehen.

UserLoginEvent

erstellt durch GUI; ein User hat sich eingeloggt; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

Attribute

  • userId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_LOGIN

SessionStartEvent

erstellt durch GUI; ein User startet eine neue Session; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

Attribute

  • sessionId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.SESSION_START

UserJoinedSessionEvent

erstellt durch GUI; ein User hat sich an einer Session angemeldet; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

  • userId: String
  • sessionId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_JOINED_SESSION

UserStartEvent

erstellt durch GUI; ein User startet die Vorschlagsfunktion; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

  • userId: String
  • sessionId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_START

StayAliveEvent

Attribute

erstellt durch GUI; Ping-Event zur Aktivitätsprüfung; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

  • userId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.STAYALIVE

UserLeftSessionEvent

erstellt durch GUI; ein User hat sich von einer Session abgemeldet; published in Topic: Constants.PubSub.Topic.SESSIONINSIGHTS

  • userId: String
  • sessionId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_LEFT_SESSION

FeedbackEvent

erstellt durch GUI; ein Dokument wurde dem Nutzer angezeigt; published in Topic: Constants.PubSub.Topic.FEEDBACK_GUI

Attribute

  • userId: String
  • documentId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.FEEDBACK

SuccessfullFeedbackEvent

erstellt durch GUI; ein Dokument wurde vom Nutzer angeklickt; published in Topic: Constants.PubSub.Topic.FEEDBACK_GUI

Attribute

  • userId: String
  • documentId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.USER_INTERFACE
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.SUCCESSFULL_FEEDBACK

SpeechTokenizer -> SemRep

1.) RichToken:
Im 1. Schritt benötigen wir von den SpeechTokenizern den folgenden Input:

"793dnj";	  // sessionID
"2"; 		  // userID
"Videokonferenz";  // context
"milestone";	 // 1. keyword
("XY";	        // n. keyword)

Reihenfolge: 1. SessionID, 2. userID, 3. context = "Videokonferenz", 4. keyword, (n. keyword)
Context soll "Videokonferenz" lauten. Dieser wird im Anschluss an den von SemRep erstellten RichToken von der Event-Gruppe weiter verfeinert. Keywords können beliebig viele angegeben werden.

[SPEECH] Attribute aller Events festlegen

Hallo Speech Tokenizer

bitte ergänzt für alle aufgeführten Events die Attribute durch Edit. Die Schreibweise ist erstmal unwichtig, wir normieren die Attribute in der Konstantenklasse. Falls Events fehlen, bitte um direkte Rückmeldung. Eine Liste aller Events inkl. Aufbau ist hier einzusehen.

TokenEvent

erstellt durch ST; beinhaltet den Token; published in Topic: Constants.PubSub.Topic.TOKEN

  • sessionId: String
  • userId: String
  • timestamp: Int
  • contexts: Array
  • tokens: Array
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SPEECH_TOKENIZATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.TOKEN

[ALLE] Userinformationen, die das System benötigt

Aktueller Status ist, dass neben den Google Informationen
Vorname, Nachname, Email, ID
die Zusatzinformationen
Unternehmen, Abteilung, Aktuelles Projekt und Projektrolle
abgefragt.

Wenn weitere Informationen benötigt werden sollten hier rein.

Events: SemRep

Hallo Semantic Representation

bitte ergänzt für alle aufgeführten Events die Attribute durch Edit. Die Schreibweise ist erstmal unwichtig, wir normieren die Attribute in der Konstantenklasse. Falls Events fehlen, bitte um direkte Rückmeldung. Eine Liste aller Events inkl. Aufbau ist hier einzusehen.

DepartmentInformationEvent

erstellt durch SR; Detailinformationen über die Abteilung; published in Topic: Constants.PubSub.Topic.INFORMATION

Attribute (siehe Kommentar)

  • sessionId: String
  • tokenId: String
  • ...
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SEMANTIC_REPRESENTATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.DEPARTMENT_INFO

DocumentInformationEvent

erstellt durch SR; Detailinformationen zu den gefundenen Dokumenten; published in Topic: Constants.PubSub.Topic.INFORMATION

Attribute (siehe Kommentar)

  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SEMANTIC_REPRESENTATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.DOCUMENT_INFO

OfferEvent

erstellt durch SR; Dokumentenvorschläge zur Anzeige; published in Topic: Constants.PubSub.Topic.OFFERS

Attribute

  • userId: String
  • documentId: String
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SEMANTIC_REPRESENTATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.OFFER

UserInformationEvent

erstellt durch SR; Detailinformationen über den User, wird bspw. beim Login ausgelöst; published in Topic: Constants.PubSub.Topic.INFORMATION

Attribute (siehe Kommentar)

  • sessionId: String
  • tokenId: String
  • ...
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SEMANTIC_REPRESENTATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_INFO

UserNonExistentEvent

erstellt durch SR; ein User ist noch nicht in der Datenbank vorhanden, Event für die GUI zur Abfrage der Daten; published in Topic: Constants.PubSub.Topic.INFORMATION

Attribute

  • sessionId: String
  • ...
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SEMANTIC_REPRESENTATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.USER_INFO

ProjectInformationEvent

erstellt durch SR; Detailinformationen über die Projekte; published in Topic: Constants.PubSub.Topic.INFORMATION

Attribute (siehe Kommentar)

  • sessionId: String
  • tokenId: String
  • ...
  • constants.AttributeKey.EVENT_SOURCE: Constants.PubSub.EventSource.SEMANTIC_REPRESENTATION
  • constants.AttributeKey.EVENT_TYPE: Constants.PubSub.EventType.PROJECT_INFO

Gui -> SemRep (neue Usereinträge)

UserInformationEvent

SemRep stell für Gui eine Abfrage-Methode bereit.
Eingabeparameter:

userID 

1.) User bereits in Ontologie:

Rückgabe:

UserID=, Vorname=Lisa, Nachname=, 
Mail=, Projekt=, Projektrolle=, Abteilung=

*UserID=, Vorname=Lisa, Nachname=, Mail= -> von Google Credential
**Projekt=, Projektrolle=, Abteilung= -> Formular

2.) User muss neu in die Ontologie eingetragen werden:

a) User nicht in Ontologie:
Rückgabe:

UserID=userID, Vorname=null, Nachname=null, 
Mail=null, Projekt=null, Projektrolle=null, Abteilung=null

b) neu anlegen in Ontologie:
Rückgabe:

UserID=, Vorname=Lisa, Nachname=, 
Mail=, Projekt=, Projektrolle=, Abteilung=

ProtocolEvent wird benötigt

Hi CEP,

wir benötigen noch einen Event, damit wir den Link zum DriveDoc (Protokoll) veröffentlichen können.

Danke

LG
ST

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.