Automation Script in maximo - jython

Please help me by providing a sample automation script (jython) for retrieving the data from database table using automation script which runs in maximo/tivoli 7.5
I'm new to get those details.

hopefully this helps ...
a example on how to load database information into maximo via rmi
https://www.ibm.com/developerworks/community/blogs/a9ba1efe-b731-4317-9724-a181d6155e3a/entry/import_data_from_db_into_maximo_by_using_rmi_with_jython?lang=en

You can review the Automation Scripting examples on the IBM Wiki:
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/IBM%20Maximo%20Asset%20Management/page/Customizing%20with%20automation%20scripts

This code is getting data from table directly
from psdi.security import UserInfo
from psdi.server import MXServer
maximo = MXServer.getMXServer()
ui = maximo.getSystemUserInfo()
sessionSet = maximo.getMboSet("MAXSESSION", ui)
sessionSet.setWhere ("issystem = '1'")
s = sessionSet.getMbo(0)
servername = s.getString("SERVERNAME")
print servername

Related

Trigger Maximo MIF integration of object using automation script

Is there a way to trigger the integration of an MBO through MIF using an automation script? Here's the use case:
Child object with no application to manage it is sent through integration
Integration fails at the destination and needs to be resent
Admin opens the automation script in Automation Scripts application, updates the script with the record ID to resend, and click our custom "Execute Script Manually" action which runs the script without the need for a launchpoint.
At a high level the script would look something like this:
from psdi.server import MXServer
server = MXServer.getMXServer()
adminuser = server.getUserInfo("MAXADMIN")
matUseTransSet = server.getMboSet("MATUSETRANS", adminuser)
matUseTransSet.setWhere("MATUSETRANSID = 123456")
matUseTransSet.reset()
matUseTransMbo = matUseTransSet.moveFirst()
while (matUseTransMbo):
# Send integration here
matUseTransMbo = matUseTransSet.moveNext()
Thanks!
Perhaps something along the lines of this:
from psdi.server import MXServer
server = MXServer.getMXServer()
adminuser = server.getUserInfo("MAXADMIN")
extSysName = 'SYSNAME'
ifaceName = 'iFaceName'
whereClause = "PRNUM = '12345'"
maxRecCount = 1
# Send integration here
server.lookup("MIC").exportData(ifaceName, extSysName, whereClause, adminuser, maxRecCount)

Automation script to modify WO created with createworkorder()

Maximo automation script noob here. I'm trying to modify some values in a WO created with createworkorder(). I don't have any error in the logs, but the changes don't shows in the newly created WO. Can anyone help? Does my code make any sense? Thx.
Maximo 7.6.1 btw.
from java.util import Date
print "===================Print1 ==================="
woRemoteMbo = mbo.createWorkorder()
woset = woRemoteMbo.getThisMboSet()
print "===================Print2 ==================="
woRemoteMbo.setValue('WORKTYPE','ST')
woRemoteMbo.setValue('COMMODITY','')
woRemoteMbo.setValue('COMMODITY','EQ07031')
#woRemoteMbo.setValue('STATUS','ATTAPPRO')
woRemoteMbo.changeStatus('ATTAPPRO',Date(),'')
woRemoteMbo.setValue('WOPRIORITY','2')
woset.save()

Acessing a database using zeep

I am trying to programmatically retrieve information from a database(BRENDA) using Zeep.
The following is the code.
import zeep
import hashlib
wsdl = "https://www.brenda-enzymes.org/soap/brenda.wsdl"
password = hashlib.sha256("xx".encode('utf-8')).hexdigest()
parameters = "xxx," + password + ",ecNumber*{}#organism*{}#".format("2.7.1.2", "Homo sapiens")
client = zeep.Client(wsdl=wsdl)
print(client)
km_string = client.getKmValue(parameters)
However, I get the following error
AttributeError: 'Client' object has no attribute 'getKmValue'
Could someone help me with this?
The above code works fine while using SOAPpy library in python 2. However, I couldn't successfully install SOAPpy in python 3, therefore I tried Zeep.
The sample code that shows SOAP implementation is available here
We fixed the webservice. It should work, now. Please have a look at the SOAP documentation on our website.
not the resolution but some hints.
1) with zeep you need to put .service between client and the name of the method. the correct syntax is client.service.getKmValue(parameters) (take a look at documentation)
anyway for zeep, getKmValue doesn't exists (but it exists on the wsdl schema and SoapUi see it).
you can also try py-suds,
but for some reason i obtain a 403 calling the wsdl.
from suds.client import Client
import hashlib
client = Client("https://www.brenda-enzymes.org/soap/brenda.wsdl")

How to write a Python script that uses the OpenERP ORM to directly upload to Postgres Database

I need to write a "standalone" script in Python to upload sales taxes to the account_tax table in the database using ONLY the ORM module of OpenERP. What I would like to do is something like the pseudo code below.
Can someone provide me a more details on the following:
1) what sys.path's do I need to set
2) what modules do I need to import before importing the "account" module. Currently when I import the "account" module I get the following error:
AssertionError: The report "report.custom" already exists!
3) What is the proper way to get my database cursor. In the code below I am simply calling psycopg2 directly to get a cursor.
If this approach cannot work, can anyone suggest an alternative approach other than writing XML files to load the data from the OpenERP application itself. This process needs to run outside of the the standard OpenERP application.
PSEUDO CODE:
import sys
# set Python paths to access openerp modules
sys.path.append("./openerp")
sys.path.append("./openerp/addons")
# import OpenERP
import openerp
# import the account addon modules that contains the tables
# to be populated.
import account
# define connection string
conn_string2 = "dbname='test2' user='xyz' password='password'"
# get a db connection
conn = psycopg2.connect(conn_string2)
# conn.cursor() will return a cursor object
cursor = conn.cursor()
# and finally use the ORM to insert data into table.
If you wanna do it via web service then have look at the OpenERP XML-RPC Web services
Example code top work with OpenERP Web Services :
import xmlrpclib
username = 'admin' #the user
pwd = 'admin' #the password of the user
dbname = 'test' #the database
# OpenERP Common login Service proxy object
sock_common = xmlrpclib.ServerProxy ('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
#replace localhost with the address of the server
# OpenERP Object manipulation service
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')
partner = {
'name': 'Fabien Pinckaers',
'lang': 'fr_FR',
}
#calling remote ORM create method to create a record
partner_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', partner)
More clearly you can also use the OpenERP Client lib
Example Code with client lib :
import openerplib
connection = openerplib.get_connection(hostname="localhost", database="test", \
login="admin", password="admin")
user_model = connection.get_model("res.users")
ids = user_model.search([("login", "=", "admin")])
user_info = user_model.read(ids[0], ["name"])
print user_info["name"]
You see both way are good but when you use the client lib, code is less and easy to understand while using xmlrpc proxy is lower level calls that you will handle
Hope this will help you.
As per my view one must go for XMLRPC or NETSVC services provided by Open ERP for such needs.
You don't need to import accounts module of Open ERP, there are possibilities that other modules have inherited accounts.tax object and had altered its behaviour as per your business needs.
Eventually if you feed data by calling those methods manually without using Open ERP Web service its possible you'll get undesired result / unexpected failures / inconsistent database state.
You can use Erppeek to browse data, but not sure if you can really upload data to DB, personally I use/prefer XMLRPC
Why don't you use the xmlrpc call of openerp.
it will not need to import account or openerp . and even you can have all orm functionality.
You can use python library to access openerp server using xmlrpc service.
Please check https://github.com/OpenERP/openerp-client-lib
It is officially supported by OpenERP SA.
If you want to interacti directly with the DB, you could just import psycopg2 and:
conn = psycopg2.connect(dbname='dbname', user='dbuser', password='dbpassword', host='dbhost')
cur = conn.cursor()
cur.execute('select * from table where id = %d' % table_id)
cur.execute('insert into table(column1, column2) values(%d, %d)' % (value1, value2))
cur.close()
conn.close()
Why you want to fix it like that?! You should create a localization module and define data in XML files. This is the standard way to fix such a problem in OpenERP.
You want to insert sales taxes for which country? Explain more plz.
from openerp.modules.registry import RegistryManager
registry = RegistryManager.get("databasename")
with registry.cursor() as cr:
user = registry.get('res.users').browse(cr, userid, listids)
print user

Creating BizTalk 2006 adapters programmatically

I'm writing a configuration script for a BizTalk server I need to create a few adapters.
In the "BizTalk Server Administration" application this is done by going to Biztalk Server Group / Platform Settings / Adapters and choosing New / Adapter from the right-click menu.
I'd like to automate this process somehow, using a Powershell script or a SQL script. I tried to use the adm_Adapter_Create stored procedure in teh Biztalk DB but it doesn't work all the way as no send / recieve handlers get configured.
Is there any way to automate this adapter creation?
You need to use WMI for this with the MSBTS_AdapterSetting class. There's some example code for this here.
Part of a Powershell script I wrote to solve this:
$adapterClass = [WMIClass] "root\MicrosoftBizTalkServer:MSBTS_AdapterSetting"
$adapter = $adapterclass.CreateInstance()
$adapter.Name = $adapterXml.name
$adapter.Comment = $adapterXml.comment
$adapter.Constraints = $adapterXml.constraints
$adapter.MgmtCLSID = $adapterXml.MgmtCLSID
$adapter.put() | Out-Null