ADempiere gRPC Server example of integration
This is a project for publish Application Dictionary of ADempiere over gRPC service
For recreate stub class you must have follow:
- protobuf
- gradle
- Maven
- Also you can see it: gRPC-Java
- Complete Java Documentation After installed it just go to source code folder an run it:
In the build.gradle you need to include in the next sections the references to jars placed in lib, packages and zkpackages in your ADEMPIERE _HOME
- In the repository section as flatDir
Example:
flatDir { dirs $ad_path + '/lib' }
- In de dependencie section,
Example
implementation fileTree(dir: $ad_path + '/lib', include: '*.jar')
gradle wrapper
./gradlew clean
./gradlew installDist
The server can be running as java class. See it: org.spin.grpc.util.DictionaryServer Don't forgive that for run server you need set yaml file line is /resources folder.
- Use latest release
- Unzip binary
- go to bin folder
- run it
./adempiere-all-in-one-server "/tmp/dictionary_connection.yaml"
The client for testing was writed for java and is located on org.spin.grpc.util.DictionaryClient Just run it and see terminal
A output generated from client request is the follow: The source code for generate output is here:
public static void main(String[] args) throws Exception { DictionaryClient client = new DictionaryClient("localhost", 50051); try { logger.info("####################### Menu Only #####################"); client.requestMenu(false); logger.info("####################### Menu + Child #####################"); client.requestMenu(true); logger.info("####################### Window Only #####################"); client.requestWindow(false); logger.info("####################### Window + Tabs #####################"); client.requestWindow(true); logger.info("####################### Tab Only #####################"); client.requestTab(false); logger.info("####################### Tab + Fields #####################"); client.requestTab(true); logger.info("####################### Field Only #####################"); client.requestField(); } finally { client.shutdown(); } }
A output from terminal
- Request Menu
INFORMACIÓN: ####################### Menu Only ##################### ene 24, 2019 5:06:05 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu: uuid: "8e4fd396-fb40-11e8-a479-7a0060f0aa01" name: "Recursos Humanos" isSummary: true
- Request Menu with child (Sub-Menu)
INFORMACIÓN: ####################### Menu + Child ##################### ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu Child: uuid: "8e51156c-fb40-11e8-a479-7a0060f0aa01" name: "Departamento" description: "Mantenimiento de departamentos de n\303\263mina" action: "W" windowUuid: "a521ec30-fb40-11e8-a479-7a0060f0aa01" ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu Child: uuid: "8e50122a-fb40-11e8-a479-7a0060f0aa01" name: "Recruitment Management" description: "Recruitment Management" isSummary: true ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu Child: uuid: "8e5115bc-fb40-11e8-a479-7a0060f0aa01" name: "Puesto" description: "Mantenimiento de puestos de n\303\263mina" action: "W" windowUuid: "a521bf80-fb40-11e8-a479-7a0060f0aa01" ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu Child: uuid: "8e5114c2-fb40-11e8-a479-7a0060f0aa01" name: "Contrato" description: "Mantenimiento de contratos de n\303\263mina" action: "W" windowUuid: "a521be7c-fb40-11e8-a479-7a0060f0aa01" ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu Child: uuid: "8e51151c-fb40-11e8-a479-7a0060f0aa01" name: "Empleado" description: "Mantenimiento de empleados de n\303\263mina" action: "W" windowUuid: "a521befe-fb40-11e8-a479-7a0060f0aa01" ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu Child: uuid: "8e500fbe-fb40-11e8-a479-7a0060f0aa01" name: "Employee Setup" description: "Employee Setup" isSummary: true ene 24, 2019 5:07:02 PM org.spin.grpc.util.DictionaryClient requestMenu INFORMACIÓN: Menu: uuid: "8e4fd396-fb40-11e8-a479-7a0060f0aa01" name: "Recursos Humanos" isSummary: true childs { uuid: "8e51156c-fb40-11e8-a479-7a0060f0aa01" name: "Departamento" description: "Mantenimiento de departamentos de n\303\263mina" action: "W" windowUuid: "a521ec30-fb40-11e8-a479-7a0060f0aa01" } childs { uuid: "8e50122a-fb40-11e8-a479-7a0060f0aa01" name: "Recruitment Management" description: "Recruitment Management" isSummary: true } childs { uuid: "8e5115bc-fb40-11e8-a479-7a0060f0aa01" name: "Puesto" description: "Mantenimiento de puestos de n\303\263mina" action: "W" windowUuid: "a521bf80-fb40-11e8-a479-7a0060f0aa01" } childs { uuid: "8e5114c2-fb40-11e8-a479-7a0060f0aa01" name: "Contrato" description: "Mantenimiento de contratos de n\303\263mina" action: "W" windowUuid: "a521be7c-fb40-11e8-a479-7a0060f0aa01" } childs { uuid: "8e51151c-fb40-11e8-a479-7a0060f0aa01" name: "Empleado" description: "Mantenimiento de empleados de n\303\263mina" action: "W" windowUuid: "a521befe-fb40-11e8-a479-7a0060f0aa01" } childs { uuid: "8e500fbe-fb40-11e8-a479-7a0060f0aa01" name: "Employee Setup" description: "Employee Setup" isSummary: true }