#-Begin-----------------------------------------------------------------
#-Loads SAP dotNET Connector Libraries----------------------------------
Function Load-NCo {
[String]$ScriptDir = $PSScriptRoot
If ([Environment]::Is64BitProcess) {
[String]$Path = $ScriptDir + "\x64\"
} Else {
[String]$Path = $ScriptDir + "\x86\"
}
[String]$File = $Path + "sapnco.dll"; Add-Type -Path $File
$File = $Path + "sapnco_utils.dll"; Add-Type -Path $File
}
#-Delivers SAP Destination----------------------------------------------
Function Get-Destination {
$cfgParams = New-Object SAP.Middleware.Connector.RfcConfigParameters
$cfgParams.Add($cfgParams::Name, "TEST")
$cfgParams.Add($cfgParams::AppServerHost, "ABAP702")
$cfgParams.Add($cfgParams::SystemNumber, "00")
$cfgParams.Add($cfgParams::Client, "001")
$cfgParams.Add($cfgParams::User, "BCUSER")
$SecPasswd = Read-Host -Prompt "Passwort" -AsSecureString
$ptrPasswd = `
[Runtime.InteropServices.Marshal]::SecureStringToBStr($SecPasswd)
$Passwd = `
[Runtime.InteropServices.Marshal]::PtrToStringBStr($ptrPasswd)
$cfgParams.Add($cfgParams::Password, $Passwd)
Return [SAP.Middleware.Connector.RfcDestinationManager]::GetDestination($cfgParams)
}
#-Shows SAP GUI Scripting Parameters from Transaction Code RZ11---------
Function Get-SAPGUIScriptingParams {
$destination = Get-Destination
$RfcReadTable = $destination.Repository.CreateFunction("RFC_READ_TABLE")
$RfcParamInfo = $destination.Repository.CreateFunction("PFL_GET_PARAMETER_INFO")
#$RfcParamChange = $destination.Repository.CreateFunction("TH_CHANGE_PARAMETER")
$RfcParamChange = $destination.Repository.CreateFunction("Z_TH_CHANGE_PARAMETER")
#-Get Parameter Attributes from SAP GUI Scripting---------------------
$RfcReadTable.SetValue("QUERY_TABLE", "TPFYPROPTY")
$RfcReadTable.SetValue("DELIMITER", ";")
[SAP.Middleware.Connector.IRfcTable]$Fields = $RfcReadTable.GetTable("FIELDS")
$Fields.Append()
$Fields.SetValue("FIELDNAME", "PARANAME") #Profile parameter name
$Fields.Append()
$Fields.SetValue("FIELDNAME", "CHG") #Flag for changes
$Fields.Append()
$Fields.SetValue("FIELDNAME", "DESCR") #Short description
$Fields.Append()
$Fields.SetValue("FIELDNAME", "DYNAMIC") #Param. can be changed dynamically
[SAP.Middleware.Connector.IRfcTable]$Options = $RfcReadTable.GetTable("OPTIONS")
$Options.Append()
$Options.SetValue("TEXT", "PARANAME LIKE 'sapgui/user_script%'")
$RfcReadTable.Invoke($destination)
[SAP.Middleware.Connector.IRfcTable]$Table = $RfcReadTable.GetTable("DATA")
ForEach ($Line In $Table) {
[System.Array]$Data = $Line.GetValue("WA").Split(";")
If ($Data[1] -ne "X" -or $Data[3] -ne "X") {
#Check if Param. can be changed
Continue
}
$RfcParamInfo.SetValue("PARNAME", $Data[0])
$RfcParamInfo.SetValue("PARTYPE", "I")
$RfcParamInfo.Invoke($destination)
[SAP.Middleware.Connector.IRfcStructure]$SubVal = `
$RfcParamInfo.GetStructure("SUB_VAL")
Write-Host $SubVal.GetValue("NAME") $SubVal.GetValue("USERVALUE") `
$SubVal.GetValue("DEFVALUE")
Switch ($SubVal.GetValue("NAME")) {
"sapgui/user_scripting" {
If ($SubVal.GetValue("USERVALUE") -ne "TRUE" -and `
$SubVal.GetValue("DEFVALUE") -ne "TRUE") {
$RfcParamChange.SetValue("PARAMETER_NAME", "sapgui/user_scripting")
$RfcParamChange.SetValue("PARAMETER_VALUE", "TRUE")
$RfcParamChange.Invoke($destination)
}
}
{
@("sapgui/user_scripting_disable_recording",
"sapgui/user_scripting_force_notification",
"sapgui/user_scripting_per_user",
"sapgui/user_scripting_set_readonly") -contains $_
}
{
If ($SubVal.GetValue("USERVALUE") -ne "FALSE" -and `
$SubVal.GetValue("DEFVALUE") -ne "FALSE") {
$RfcParamChange.SetValue("PARAMETER_NAME", $SubVal.GetValue("NAME"))
$RfcParamChange.SetValue("PARAMETER_VALUE", "FALSE")
$RfcParamChange.Invoke($destination)
}
}
}
}
}
#-Main Function---------------------------------------------------------
Function Main () {
If ($PSVersionTable.PSVersion.Major -ge 5) {
Load-NCo
Get-SAPGUIScriptingParams
}
}
#-Main------------------------------------------------------------------
Main
#-Error Routine---------------------------------------------------------
Trap {
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") > $Null
[Void][System.Windows.Forms.MessageBox]::Show( `
$_.Exception.GetType().FullName + `
[System.Environment]::NewLine + `
"Error at line " + $_.InvocationInfo.ScriptLineNumber + `
" in " + $_.InvocationInfo.ScriptName + `
[System.Environment]::NewLine + [System.Environment]::NewLine + `
$_.Exception.Message, "An Error Occurred", 0)
Exit
}
#-End-------------------------------------------------------------------
FUNCTION Z_TH_CHANGE_PARAMETER.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(PARAMETER_NAME) LIKE TPFET-PARNAME
*" VALUE(PARAMETER_VALUE) LIKE TPFET-PVALUE
*" VALUE(CHECK_PARAMETER) LIKE SY-INDEX DEFAULT 1
*" EXCEPTIONS
*" NOT_AUTHORIZED
*" NOT_IN_SAME_SYSTEM
*" NOT_CHANGEABLE
*" NOT_FOUND
*" INVALID_VALUE
*" SHMPRF_ERROR
*" UNKNOWN_OPCODE
*" LENGTH_EXCEEDED
*" UNKNOWN
*"----------------------------------------------------------------------
CALL FUNCTION 'TH_CHANGE_PARAMETER'
DESTINATION 'NONE'
EXPORTING
PARAMETER_NAME = PARAMETER_NAME
PARAMETER_VALUE = PARAMETER_VALUE
EXCEPTIONS
NOT_AUTHORIZED = 1
NOT_IN_SAME_SYSTEM = 2
NOT_CHANGEABLE = 3
NOT_FOUND = 4
INVALID_VALUE = 5
SHMPRF_ERROR = 6
UNKNOWN_OPCODE = 7
LENGTH_EXCEEDED = 8
OTHERS = 9.
CASE sy-subrc.
WHEN 1.
RAISE NOT_AUTHORIZED.
WHEN 2.
RAISE NOT_IN_SAME_SYSTEM.
WHEN 3.
RAISE NOT_CHANGEABLE.
WHEN 4.
RAISE NOT_FOUND.
WHEN 5.
RAISE INVALID_VALUE.
WHEN 6.
RAISE SHMPRF_ERROR.
WHEN 7.
RAISE UNKNOWN_OPCODE.
WHEN 8.
RAISE LENGTH_EXCEEDED.
WHEN 9.
RAISE UNKNOWN.
ENDCASE.
ENDFUNCTION.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
53 | |
5 | |
4 | |
4 | |
4 | |
4 | |
3 | |
3 | |
3 | |
3 |