Als Methode zum Synchronisieren von Kundendaten zwischen Salesforce und kintone habe ich einen weiteren Artikel mit einer Windows-Formularanwendung (C # / ADO.NET) eingeführt, die den ** CData-Treiber ** verwendet. Der CData-Treiber wird von verschiedenen Technologien sowie von ADO.NET bereitgestellt. Dieses Mal möchte ich ein Java-Beispiel für eine Anwendung vorstellen, die Kundendaten zwischen Salesforce und kintone synchronisiert.
Der Umriss dieser Anwendung ist wie folgt.
Schauen wir uns nun die Entwicklungsschritte für diese Beispielanwendung an.
Klicken Sie hier, um den Quellcode dieser Beispielanwendung anzuzeigen (https://github.com/kasoorimethi/Salesforce2KintoneJDBC).
Installieren Sie die CData-Software. Die folgenden zwei sind diesmal erforderlich.
Verwenden Sie Eclipse 4.6. Bitte haben Sie die folgenden Funktionen in Eclipse installiert.
e(fx)clipse - IDE
Verwenden Sie http://download.eclipse.org/efxclipse/updates-released/2.4.0/site für den Standort der Site.
Erstellen Sie ein neues Projekt. Wählen Sie JavaFX Project.
Behalten Sie die Standardeinstellungen bei und klicken Sie nacheinander auf die Schaltfläche "Weiter". Geben Sie im letzten Dialogfeld "FXML" für "Sprache", "javax.scene.layout.AnchorPane" für "Root-Type", "MainPane" für "Dateiname" und "MainPaneController" für "Controllername" an. Klicken Sie auf die Schaltfläche Fertig stellen.
Die Salesforce-Seite implementiert die Klasse, die Contact entspricht, und die Kintone-Seite implementiert die Klasse, die der Kundenliste entspricht. Dies ist ein einfacher DTO.
package application;
public class Contact {
private String id;
private String accountId;
private String department;
private String email;
private String fax;
private String name;
private String phone;
private String accountName;
private String accountAddress;
private String accountBillingPostalCode;
//Das Folgende wird für jeden Setter weggelassen/getter
}
package application;
Kundenliste der öffentlichen Klasse{
private int recordId;
private String fax_Nur Zahlen_;
private String tel_Nur Zahlen_;
private String-E-Mail-Adresse;
private String-Datensatznummer;
privater String Firmenname;
private String-Adresse;
privater String Kontaktname;
Name der privaten String-Abteilung;
private Postleitzahl_Nur Zahlen_;
//Das Folgende wird für jeden Setter weggelassen/getter
}
MainPaneController Dies ist die Hauptklasse dieser Anwendung. Implementieren Sie javafx.fxml.Initializable, damit es initialisiert werden kann. Fügen Sie außerdem eine JDBC-URL hinzu, um eine Verbindung zu Salesforce / kintone herzustellen, und ein TableView-Feld, um deren Daten anzuzeigen.
public class MainPaneController implements Initializable {
private String salesforceJdbcUrl = "<Salesforce JDBC-URL>";
private String kintoneJdbcUrl = "<JDBC-URL von kintone>";
@FXML
private TableView<Contact> salesforceTable;
@FXML
private TableView<Kundenliste> kintoneTable;
Implementieren Sie den Prozess zum Lesen von Salesforce / Kintone-Daten in TableView in MainPaneController. Es ist einfach mit JDBC.
private void loadSalesforceTableView() {
salesforceTable.getItems().clear();
try (
Connection conn = DriverManager.getConnection(salesforceJdbcUrl);
PreparedStatement pstmt = conn.prepareStatement(
"SELECT c.*, " +
"a.Name AccountName, a.BillingPostalCode AccountBillingPostalCode, CONCAT(a.BillingState, a.BillingCity, a.BillingStreet) AccountAddress " +
"FROM Contact c INNER JOIN Account a ON a.Id=c.AccountId");
ResultSet rs = pstmt.executeQuery();
) {
while (rs.next()) {
Contact c = new Contact();
c.setId(rs.getString("Id"));
c.setAccountId(rs.getString("AccountId"));
c.setDepartment(rs.getString("Department"));
c.setEmail(rs.getString("Email"));
c.setFax(rs.getString("Fax"));
c.setName(rs.getString("Name"));
c.setPhone(rs.getString("Phone"));
c.setAccountName(rs.getString("AccountName"));
c.setAccountAddress(rs.getString("AccountAddress"));
c.setAccountBillingPostalCode(rs.getString("AccountBillingPostalCode"));
salesforceTable.getItems().add(c);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private void loadKintoneTableView() {
kintoneTable.getItems().clear();
try (
Connection conn = DriverManager.getConnection(kintoneJdbcUrl);
PreparedStatement pstmt = conn.prepareStatement("SELECT *AUS DER Kundenliste");
ResultSet rs = pstmt.executeQuery();
) {
while (rs.next()) {
Kundenliste c=neue Kundenliste();
c.setRecordId(rs.getInt("RecordId"));
c.setFax_Nur Zahlen_(rs.getString("Fax(Nur Zahlen)"));
c.setTel_Nur Zahlen_(rs.getString("Tel(Nur Zahlen)"));
c.E-Mail-Adresse festlegen(rs.getString("Mail Adresse"));
c.Datensatznummer einstellen(rs.getString("Rekordzahl"));
c.Firmennamen einstellen(rs.getString("Name der Firma"));
c.Adresse einstellen(rs.getString("Adresse"));
c.Name der verantwortlichen Person festlegen(rs.getString("Verantwortliche Person"));
c.Abteilungsname festlegen(rs.getString("Abteilungsname"));
c.Postleitzahl einstellen_Nur Zahlen_(rs.getString("Postleitzahl(Nur Zahlen)"));
kintoneTable.getItems().add(c);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
Implementieren Sie die Initialisierung von MainPaneController. Der Hauptprozess besteht darin, nur die Datenlesemethode aufzurufen.
@Override
public void initialize(URL location, ResourceBundle resources) {
salesforceTable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
loadSalesforceTableView();
loadKintoneTableView();
}
Implementieren Sie den Importvorgang. Was wir tun, sind die Daten der Zeile, die in der TableView auf der Salesforce-Seite ausgewählt wurde, und die einfache Ausführung der INSERT / UPDATE-Anweisung auf der Kintone-Seite in JDBC.
@FXML
private void importOnClick(MouseEvent event) {
try (Connection conn = DriverManager.getConnection(kintoneJdbcUrl)) {
conn.setAutoCommit(false);
for (Contact contact : salesforceTable.getSelectionModel().getSelectedItems()) {
Kundenliste kintoneItem= kintoneTable.getItems().stream()
.filter(o -> o.E-Mail-Adresse erhalten().equals(contact.getEmail()))
.findFirst()
.orElse(neue Kundenliste());
PreparedStatement pstmt;
if (kintoneItem.getRecordId() == 0) {
pstmt = conn.prepareStatement("IN Kundenliste EINFÜGEN(Mail Adresse,Name der Firma,Adresse,Verantwortliche Person,Abteilungsname, [Postleitzahl(Nur Zahlen)], [Tel(Nur Zahlen)], [Fax(Nur Zahlen)]) VALUES(?, ? ,? ,? ,? ,? ,? ,?)");
} else {
pstmt = conn.prepareStatement("UPDATE Kundenliste SET E-Mail-Adresse=?,Name der Firma=?,Adresse=?,Verantwortliche Person=?,Abteilungsname=?, [Postleitzahl(Nur Zahlen)]=?, [Tel(Nur Zahlen)]=?, [Fax(Nur Zahlen)]=? WHERE RecordId=?");
pstmt.setInt(9, kintoneItem.getRecordId());
}
pstmt.setString(1, contact.getEmail());
pstmt.setString(2, contact.getAccountName());
pstmt.setString(3, contact.getAccountAddress());
pstmt.setString(4, contact.getName());
pstmt.setString(5, Optional.ofNullable(contact.getDepartment()).orElse(""));
pstmt.setString(6, Optional.ofNullable(contact.getAccountBillingPostalCode()).orElse("").replace("-", ""));
pstmt.setString(7, contact.getPhone());
pstmt.setString(8, contact.getFax());
pstmt.execute();
pstmt.close();
}
conn.commit();
} catch (Exception e) {
System.out.println(e.getMessage());
}
loadKintoneTableView();
}
Erstellen Sie abschließend den Bildschirm. Öffnen Sie application / MainPane.fxml und implementieren Sie den folgenden Code. Es ordnet jede Eigenschaft der Datenmodellklasse den Spalten der Tabelle zu.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="660.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/8.0.102" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainPaneController">
<children>
<TableView fx:id="salesforceTable" layoutX="14.0" layoutY="53.0" prefHeight="600.0" prefWidth="485.0">
<columns>
<TableColumn prefWidth="150.0" text="Verantwortliche Person">
<cellValueFactory><PropertyValueFactory property="name" /></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="150.0" text="Mail Adresse">
<cellValueFactory><PropertyValueFactory property="email" /></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="150.0" resizable="false" sortable="false" text="Name der Firma">
<cellValueFactory><PropertyValueFactory property="accountName" /></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="150.0" text="Abteilungsname">
<cellValueFactory><PropertyValueFactory property="department" /></cellValueFactory>
</TableColumn>
<TableColumn prefWidth="150.0" text="Adresse">
<cellValueFactory><PropertyValueFactory property="accountAddress" /></cellValueFactory>
</TableColumn>
</columns>
</TableView>
<Button layoutX="542.0" layoutY="263.0" mnemonicParsing="false" onMouseClicked="#importOnClick" prefHeight="35.0" prefWidth="116.0" text="importieren" />
<TableView fx:id="kintoneTable" layoutX="696.0" layoutY="53.0" prefHeight="600.0" prefWidth="485.0">
<columns>
<TableColumn editable="false" prefWidth="75.0" sortable="false" text="Rekordzahl">
<cellValueFactory><PropertyValueFactory property="Rekordzahl" /></cellValueFactory>
</TableColumn>
<TableColumn editable="false" prefWidth="150.0" sortable="false" text="Verantwortliche Person">
<cellValueFactory><PropertyValueFactory property="Verantwortliche Person" /></cellValueFactory>
</TableColumn>
<TableColumn editable="false" prefWidth="150.0" sortable="false" text="Mail Adresse">
<cellValueFactory><PropertyValueFactory property="Mail Adresse" /></cellValueFactory>
</TableColumn>
<TableColumn editable="false" prefWidth="150.0" sortable="false" text="Name der Firma">
<cellValueFactory><PropertyValueFactory property="Name der Firma" /></cellValueFactory>
</TableColumn>
<TableColumn editable="false" prefWidth="100.0" sortable="false" text="Abteilungsname">
<cellValueFactory><PropertyValueFactory property="Abteilungsname" /></cellValueFactory>
</TableColumn>
<TableColumn editable="false" prefWidth="150.0" sortable="false" text="Adresse">
<cellValueFactory><PropertyValueFactory property="Adresse" /></cellValueFactory>
</TableColumn>
</columns>
</TableView>
</children>
</AnchorPane>
Legt die Größe des Fensters fest. Öffnen Sie application / Main.java und ändern Sie die Größe der Szene.
Scene scene = new Scene(root, 1200, 660);
Das ist alles für die Implementierung.
Erstellen Sie eine Ausführungskonfiguration. Öffnen Sie Ausführen-> Konfiguration ausführen, klicken Sie mit der rechten Maustaste auf Java-Anwendung und wählen Sie Neu. Öffnen Sie die Registerkarte Klassenpfad, geben Sie zwei JDBC-Treiber für CData an und klicken Sie auf die Schaltfläche Ausführen.
Bei der Ausführung wird ein Fenster mit Salesforce- und Kintone-Daten geöffnet, die in der Tabellenansicht angezeigt werden.
Wählen Sie die Zeile aus, in die Sie Daten migrieren möchten, und klicken Sie auf die Schaltfläche "Importieren". Die ausgewählten Daten werden in Kintone registriert.
Recommended Posts