idempierews_dart 1.1.2 copy "idempierews_dart: ^1.1.2" to clipboard
idempierews_dart: ^1.1.2 copied to clipboard

Soap Client for iDempiere ERP, from dart code base you can send request and receive response from iDempiere/Adempiere/Compiere ERP

example/main.dart

// Copyright (c) 2020 Mohamed Dernoun <med.dernoun@gmail.com>.
//
// This file is part of idempierews_dart.
//
// idempierews_dart is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// idempierews_dart is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with idempierews_dart.  If not, see <http://www.gnu.org/licenses/>.
//

import 'dart:io';
import 'dart:typed_data';

import 'package:hex/hex.dart' show HEX;
import 'package:idempierews_dart/idempierews_dart.dart';

abstract class TestWS {
  LoginRequest _login;
  WebServiceConnection _client;

  TestWS() {
    _login = new LoginRequest();
    _login.setUser = 'superuser @ idempiere.com';
    _login.setPass = 'System';
    _login.setClientID = 11;
    _login.setRoleID = 50004;
    _login.setOrgID = 11;
    _login.setStage = 2;
    _login.setWarehouseID = 103;

    _client = new WebServiceConnection();
    _client.setAttempts = 3;
    _client.setTimeout = 5000;
    _client.setAttemptsTimeout = 5000;
    _client.setUrl = getUrlBase();
    _client.setAppName = 'Java Test WS Client';
    runTest();
  }

  LoginRequest get getLogin => _login;

  String getUrlBase() {
    return 'https://test.idempiere.org';
  }

  WebServiceConnection get getClient => _client;

  void printTotal() {
    print('--------------------------');
    print('Web Service: ${getWebServiceType()}');
    print('Attempts: ${_client.getAttemptsRequest}');
    print('Time: ${_client.getTimeRequest}');
    print('--------------------------');
  }

  void saveRequestResponse() {
    try {
      getClient.writeRequest('../documents/${getWebServiceType()}_request.xml');
      getClient
          .writeResponse('../documents/${getWebServiceType()}_response.xml');
    } catch (e) {
      print(e);
    }
  }

  runTest() async {
    await testPerformed();
    saveRequestResponse();
    printTotal();
    print('');
  }

  String getWebServiceType();

  Future<void> testPerformed();
}

class TestQueryData extends TestWS {
  @override
  String getWebServiceType() => 'QueryBPartner';

  @override
  Future<void> testPerformed() async {
    QueryDataRequest ws = QueryDataRequest();
    ws.setWebServiceType = getWebServiceType();
    ws.setLogin = getLogin;
    ws.setLimit = 2;
    ws.setOffset = 0;

    DataRow data = DataRow();
    data.addField('C_BP_Group_ID', '104');
    ws.setDataRow = data;
    WebServiceConnection client = getClient;

    try {
      WindowTabDataResponse response = await client.sendRequest(ws);

      if (response.getStatus == WebServiceResponseStatus.Error)
        print(response.getErrorMessage);
      else {
        print('Total rows: ${response.getTotalRows}');
        print('Num rows: ${response.getNumRows}');
        print('Start row: ${response.getStartRow}');
        print('');
        for (int i = 0; i < response.getDataSet.getRowsCount(); i++) {
          print('Row: ${i + 1}');
          for (int j = 0;
              j < response.getDataSet.getRow(i).getFieldsCount();
              j++) {
            Field field = response.getDataSet.getRow(i).getFields.elementAt(j);
            print('Column: ${field.getColumn} = ${field.getValue}');
          }
          print('');
        }
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestCreateData extends TestWS {
  @override
  String getWebServiceType() => 'CreateBPartner';

  @override
  Future<void> testPerformed() async {
    CreateDataRequest createData = new CreateDataRequest();
    createData.setLogin = getLogin;
    createData.setWebServiceType = getWebServiceType();

    DataRow data = new DataRow();
    data.addField('C_BP_Group_ID', '104');
    data.addField('Name', 'Test BPartner Dart');
    data.addField(
        'Value', 'Test_BPartner${DateTime.now().millisecondsSinceEpoch}');
    data.addField('TaxID', '123456');
    createData.setDataRow = data;

    WebServiceConnection client = getClient;
    try {
      StandardResponse response = await client.sendRequest(createData);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print('RecordID: ${response.getRecordID}');
        print('');

        for (int i = 0; i < response.getOutputFields.getFieldsCount(); i++) {
          print(
              'Column ${i + 1}: ${response.getOutputFields.getFieldAt(i).getColumn} = ${response.getOutputFields.getFieldAt(i).getValue}');
        }
        print('');
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestDeleteData extends TestWS {
  @override
  String getWebServiceType() => 'DeleteBPartner';

  @override
  Future<void> testPerformed() async {
    DeleteDataRequest deleteData = new DeleteDataRequest();
    deleteData.setLogin = getLogin;
    deleteData.setWebServiceType = getWebServiceType();
    deleteData.setRecordID = 1000000;

    WebServiceConnection client = getClient;
    try {
      StandardResponse response = await client.sendRequest(deleteData);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print('RecordID: ${response.getRecordID}');
        print('');
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestReadData extends TestWS {
  @override
  String getWebServiceType() => 'ReadBPartner';

  @override
  Future<void> testPerformed() async {
    ReadDataRequest ws = new ReadDataRequest();
    ws.setWebServiceType = getWebServiceType();
    ws.setLogin = getLogin;
    ws.setRecordID = 50003;

    WebServiceConnection client = getClient;
    try {
      WindowTabDataResponse response = await client.sendRequest(ws);
      if (response.getStatus == WebServiceResponseStatus.Error)
        print(response.getErrorMessage);
      else if (response.getStatus == WebServiceResponseStatus.Unsuccessful)
        print('Unsuccessful');
      else {
        print('Total rows: ${response.getNumRows}');
        print('');
        for (int i = 0; i < response.getDataSet.getRowsCount(); i++) {
          print('Row: ${i + 1}');
          for (int j = 0;
              j < response.getDataSet.getRow(i).getFieldsCount();
              j++) {
            Field field = response.getDataSet.getRow(i).getFields.elementAt(j);
            print('Column: ${field.getColumn} = ${field.getValue}');
          }
          print('');
        }
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestUpdateData extends TestWS {
  @override
  String getWebServiceType() => 'UpdateBPartner';

  @override
  Future<void> testPerformed() async {
    UpdateDataRequest updateData = new UpdateDataRequest();
    updateData.setLogin = getLogin;
    updateData.setWebServiceType = getWebServiceType();
    updateData.setRecordID = 118;

    DataRow data = new DataRow();
    data.addField('URL', 'https://test.idempiere.org');
    updateData.setDataRow = data;

    WebServiceConnection client = getClient;
    try {
      StandardResponse response = await client.sendRequest(updateData);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print('RecordID: ${response.getRecordID}');
        print('');

        for (int i = 0; i < response.getOutputFields.getFieldsCount(); i++) {
          print(
              'Column ${i + 1}: ${response.getOutputFields.getFieldAt(i).getColumn} = ${response.getOutputFields.getFieldAt(i).getValue}');
        }
        print('');
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestCreateUpdateData extends TestWS {
  @override
  String getWebServiceType() => 'CreateUpdateUser';

  @override
  Future<void> testPerformed() async {
    CreateUpdateDataRequest createData = new CreateUpdateDataRequest();
    createData.setLogin = getLogin;
    createData.setWebServiceType = getWebServiceType();

    DataRow data = new DataRow();
    data.addField('Name', 'Joe Block');
    data.addField('Phone', '555-879-89');
    data.addField('C_BPartner_ID', '118');
    data.addField('EMail', 'joeblock@gardenworld.com');
    createData.setDataRow = data;

    WebServiceConnection client = getClient;
    try {
      StandardResponse response = await client.sendRequest(createData);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print('RecordID: ${response.getRecordID}');
        print('');

        for (int i = 0; i < response.getOutputFields.getFieldsCount(); i++) {
          print(
              'Column ${i + 1}: ${response.getOutputFields.getFieldAt(i).getColumn} = ${response.getOutputFields.getFieldAt(i).getValue}');
        }
        print('');
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestGetListData extends TestWS {
  @override
  String getWebServiceType() => 'GetListSalesRegions';

  @override
  Future<void> testPerformed() async {
    GetListRequest getListRequest = new GetListRequest();
    getListRequest.setWebServiceType = getWebServiceType();
    getListRequest.setLogin = getLogin;

    WebServiceConnection client = getClient;

    try {
      WindowTabDataResponse response = await client.sendRequest(getListRequest);
      if (response.getStatus == WebServiceResponseStatus.Error)
        print(response.getErrorMessage);
      else if (response.getStatus == WebServiceResponseStatus.Unsuccessful)
        print('Unsuccessful');
      else {
        print('Total Rows: ${response.getNumRows}');
        print('');
        for (int i = 0; i < response.getDataSet.getRowsCount(); i++) {
          print('Row: ${i + 1}');
          for (int j = 0;
              j < response.getDataSet.getRow(i).getFieldsCount();
              j++) {
            Field field = response.getDataSet.getRow(i).getFields.elementAt(j);
            print('Column: ${field.getColumn} = ${field.getValue}');
          }
          print('');
        }
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestRunProcess extends TestWS {
  Future<File> writeToFile(Uint8List data, String path) async {
    try {
      var file = File(path);
      return await file.writeAsBytes(data);
    } catch (e) {
      print(e);
    }
    return null;
  }

  @override
  String getWebServiceType() => 'RunStorageDetail';

  @override
  Future<void> testPerformed() async {
    RunProcessRequest process = new RunProcessRequest();
    process.setWebServiceType = getWebServiceType();
    process.setLogin = getLogin;

    ParamValues params = new ParamValues();
    params.addField('M_Product_ID', '128');
    process.setParamValues = params;

    WebServiceConnection client = getClient;
    try {
      RunProcessResponse response = await client.sendRequest(process);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print(response.getReportFormat);
        var list = HEX.decode(response.getSummary);
        Uint8List bytes = Uint8List.fromList(list);
        writeToFile(
            bytes, '../../documents/ReadFileTest.${response.getReportFormat}');
      }
    } catch (e) {}
  }
}

class TestDocAction extends TestWS {
  @override
  String getWebServiceType() => 'ActionCompleteOrder';

  @override
  Future<void> testPerformed() async {
    SetDocActionRequest action = new SetDocActionRequest();
    action.setDocAction = DocAction.Complete;
    action.setLogin = getLogin;
    action.setRecordID = 1000000; // Change the recordId
    action.setWebServiceType = getWebServiceType();

    WebServiceConnection client = getClient;

    try {
      StandardResponse response = await client.sendRequest(action);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print('RecordID: ${response.getRecordID}');
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestComposite extends TestWS {
  @override
  String getWebServiceType() => 'SyncOrder';

  @override
  Future<void> testPerformed() async {
    // Define the composite
    CompositeOperationRequest compositeOperation = CompositeOperationRequest();
    compositeOperation.setLogin = getLogin;
    compositeOperation.setWebServiceType = getWebServiceType();

    // Create BPartner
    CreateDataRequest createBPartner = new CreateDataRequest();
    createBPartner.setWebServiceType = 'CreateBPartner';

    DataRow dataPartner = new DataRow();
    dataPartner.addField('C_BP_Group_ID', '104');
    dataPartner.addField('Name', 'iTBridge');
    dataPartner.addField(
        'Value', 'iTBridge${DateTime.now().millisecondsSinceEpoch}');
    dataPartner.addField('TaxID', '123456');
    createBPartner.setDataRow = dataPartner;

    // Create User for BP
    CreateUpdateDataRequest createUser = new CreateUpdateDataRequest();
    createUser.setLogin = getLogin;
    createUser.setWebServiceType = 'CreateUpdateUser';
    DataRow dataUser = new DataRow();
    dataUser.addField('Name', 'iTBridge');
    dataUser.addField('Phone', '555-879-89');
    dataUser.addField('EMail', 'joeblock@gardenworld.com');
    dataUser.addField('C_BPartner_ID', '@C_BPartner.C_BPartner_ID');
    createUser.setDataRow = dataUser;

    // Create Location for user
    CreateDataRequest createLocation = new CreateDataRequest();
    createLocation.setWebServiceType = 'CreateUpdateLocation1';

    DataRow dataLocation = new DataRow();
    dataLocation.addField('Address1', '36 lot kadri Brahim iTBridge');
    dataLocation.addField('C_Country_ID', '112');
    dataLocation.addField('City', 'Constantine');
    dataLocation.addField('Postal', '25004');
    createLocation.setDataRow = dataLocation;

    // Create BPartner Location from the location
    CreateDataRequest createBPLocation = new CreateDataRequest();
    createBPLocation.setWebServiceType = 'CreateUpdateBPLocation';

    DataRow dataBPLocation = new DataRow();
    dataBPLocation.addField('IsShipTo', 'Y');
    dataBPLocation.addField('IsBillTo', 'Y');
    dataBPLocation.addField('C_BPartner_ID', '@C_BPartner.C_BPartner_ID');
    dataBPLocation.addField('C_Location_ID', '@C_Location.C_Location_ID');
    createBPLocation.setDataRow = dataBPLocation;

    // Create Sales Order Header
    CreateDataRequest createOrder = new CreateDataRequest();
    createOrder.setWebServiceType = 'createOrderRecord';
    DataRow dataOrder = new DataRow();
    dataOrder.addField('C_DocTypeTarget_ID', '135');
    dataOrder.addField('C_BPartner_ID', '@C_BPartner.C_BPartner_ID');
    dataOrder.addField('C_BPartner_Location_ID',
        '@C_BPartner_Location.C_BPartner_Location_ID');
    dataOrder.addField('Bill_BPartner_ID', '@C_BPartner.C_BPartner_ID');
    dataOrder.addField(
        'Bill_Location_ID', '@C_BPartner_Location.C_BPartner_Location_ID');
    dataOrder.addField('AD_User_ID', '@AD_User.AD_User_ID');
    dataOrder.addField('M_Warehouse_ID', '103');
    createOrder.setDataRow = dataOrder;

    // Create Sales Order Line
    CreateDataRequest createOrderLine = new CreateDataRequest();
    createOrderLine.setWebServiceType = 'CreateOrderLine';
    DataRow dataLine = new DataRow();
    dataLine.addField('C_Order_ID', '@C_Order.C_Order_ID');
    dataLine.addField('M_Product_ID', '128');
    dataLine.addField('QtyEntered', '10');
    dataLine.addField('QtyOrdered', '10');
    createOrderLine.setDataRow = dataLine;

    // Complete the order
    SetDocActionRequest docAction = new SetDocActionRequest();
    docAction.setDocAction = DocAction.Complete;
    docAction.setWebServiceType = 'CompleteOrder';
    docAction.setRecordIDVariable = '@C_Order.C_Order_ID';

    compositeOperation.addOperationInit(createBPartner, false, true);
    compositeOperation.addOperationInnerWS(createUser);
    compositeOperation.addOperationInnerWS(createLocation);
    compositeOperation.addOperationInnerWS(createBPLocation);
    compositeOperation.addOperationInnerWS(createOrder);
    compositeOperation.addOperationInnerWS(createOrderLine);
    compositeOperation.addOperationInnerWS(docAction);

    WebServiceConnection client = getClient;

    try {
      CompositeResponse response = await client.sendRequest(compositeOperation);
      if (response.getStatus == WebServiceResponseStatus.Error)
        print(response.getErrorMessage);
      else {
        for (int i = 0; i < response.getResponsesCount(); i++) {
          if (response.getResponse(i).getStatus ==
              WebServiceResponseStatus.Error) {
            print(response.getResponse(i).getErrorMessage);
          } else {
            print(
                'Response: ${response.getResponse(i).getWebServiceResponseModel().toString().split('.').last}');
            print('Request:  ${response.getResponse(i).getWebServiceType}');
          }
          print('');
        }
      }
    } catch (e) {}
  }
}

class TestCreateImage extends TestWS {
  // from StackOverFlow
  Future<Uint8List> _readFileByte(String filePath) async {
    File imageFile = new File(filePath);
    Uint8List bytes;
    await imageFile.readAsBytes().then((value) {
      bytes = Uint8List.fromList(value);
      print('reading of bytes is completed');
    }).catchError((onError) {
      print('Exception Error while reading image from path:' +
          onError.toString());
    });
    return bytes;
  }

  @override
  String getWebServiceType() => 'CreateImageTest';

  @override
  Future<void> testPerformed() async {
    CreateDataRequest createImage = CreateDataRequest();
    createImage.setWebServiceType = 'CreateImageTest';
    createImage.setLogin = getLogin;
    String imageName = '../../documents/ImageTest.png';

    DataRow data = new DataRow();
    data.addField('Name', imageName.split('/').last);
    data.addField('Description', 'Test Create image');
    var file = await _readFileByte(imageName);

    data.addField("BinaryData", file);

    createImage.setDataRow = data;

    WebServiceConnection client = getClient;
    try {
      StandardResponse response = await client.sendRequest(createImage);

      if (response.getStatus == WebServiceResponseStatus.Error) {
        print(response.getErrorMessage);
      } else {
        print('RecordID: ${response.getRecordID}');
        print('');

        for (int i = 0; i < response.getOutputFields.getFieldsCount(); i++) {
          print(
              'Column ${i + 1}: ${response.getOutputFields.getFieldAt(i).getColumn} = ${response.getOutputFields.getFieldAt(i).getValue}');
        }
        print('');
      }
    } catch (e) {
      print(e);
    }
  }
}

class TestReadImage extends TestWS {
  Future<void> writeToFile(Uint8List data, String path) async {
    try {
      var file = File(path);
      await file.writeAsBytes(data);
    } catch (e) {
      print(e);
    }
  }

  @override
  String getWebServiceType() => 'ReadImageTest';

  @override
  Future<void> testPerformed() async {
    ReadDataRequest ws = new ReadDataRequest();
    ws.setWebServiceType = getWebServiceType();
    ws.setLogin = getLogin;
    ws.setRecordID = 1000000;

    WebServiceConnection client = getClient;

    try {
      WindowTabDataResponse response = await client.sendRequest(ws);
      if (response.getStatus == WebServiceResponseStatus.Error)
        print(response.getErrorMessage);
      else if (response.getStatus == WebServiceResponseStatus.Unsuccessful)
        print('Unsuccessful');
      else {
        print('Total rows: ${response.getNumRows}');
        print('');
        for (int i = 0; i < response.getDataSet.getRowsCount(); i++) {
          print('Row: ${i + 1}');
          for (int j = 0;
              j < response.getDataSet.getRow(i).getFieldsCount();
              j++) {
            Field field = response.getDataSet.getRow(i).getFields.elementAt(j);
            print('Column: ${field.getColumn} = ${field.getValue}');
            if (field.getColumn == 'BinaryData' && field.getColumn.isNotEmpty)
              await writeToFile(
                  field.getByteValue(), "../../documents/ReadImageTest.png");
          }
          print('');
        }
      }
    } catch (e) {}
  }
}

class TestQueryImage extends TestWS {
  Future<void> writeToFile(Uint8List data, String path) async {
    try {
      var file = File(path);
      await file.writeAsBytes(data);
    } catch (e) {
      print(e);
    }
  }

  @override
  String getWebServiceType() => 'QueryImageTest';

  @override
  Future<void> testPerformed() async {
    QueryDataRequest ws = new QueryDataRequest();
    ws.setWebServiceType = getWebServiceType();
    ws.setLogin = getLogin;
    ws.setLimit = 3;
    ws.setOffset = 3;

    WebServiceConnection client = getClient;

    try {
      WindowTabDataResponse response = await client.sendRequest(ws);

      if (response.getStatus == WebServiceResponseStatus.Error)
        print(response.getErrorMessage);
      else {
        print('Total rows: ${response.getTotalRows}');
        print('Num rows: ${response.getNumRows}');
        print('Start row: ${response.getStartRow}');
        print('');
        for (int i = 0; i < response.getDataSet.getRowsCount(); i++) {
          print('Row: ${i + 1}');
          for (int j = 0;
              j < response.getDataSet.getRow(i).getFieldsCount();
              j++) {
            Field field = response.getDataSet.getRow(i).getFields.elementAt(j);
            print('Column: ${field.getColumn} = ${field.getValue}');
            print(response.getDataSet
                .getRow(i)
                .getField('AD_Image_ID')
                .getValue
                .toString());
            print(response.getDataSet
                .getRow(i)
                .getField('AD_Image_ID')
                .getValue
                .toString());
            if (field.getColumn == 'BinaryData' && field.getColumn.isNotEmpty)
              await writeToFile(field.getByteValue(),
                  "../../documents/QueryImageTest_${response.getDataSet.getRow(i).getField('AD_Image_ID').getValue.toString()}");
          }
          print('');
        }
      }
    } catch (e) {}
  }
}

main(List<String> args) async {
  print('Uncomment the function that you want to test on main.dart');

  TestQueryData();

  // TestCreateData();

  // TestDeleteData();

  // TestReadData();

  // TestUpdateData();

  // TestCreateUpdateData();

  // TestGetListData();

  // TestRunProcess();

  // TestDocAction();

  // TestComposite();

  // to test this web service you have to pack in https://github.com/dernoun/idempiere-utils/blob/master/Image%20WS%202Pack.zip

  // TestCreateImage();

  // TestReadImage();

  // TestQueryImage();
}
6
likes
40
pub points
24%
popularity

Publisher

unverified uploader

Soap Client for iDempiere ERP, from dart code base you can send request and receive response from iDempiere/Adempiere/Compiere ERP

Repository (GitHub)
View/report issues

License

GPL-3.0 (LICENSE)

Dependencies

extension, hex, http, intl, xml

More

Packages that depend on idempierews_dart