Issue to pass value from sub report to main report.Please give me solutions - crystal-reports-2008

I had done below code in crystal report:
1) I have created one sub report in details section.
2) In sub report , I have pending amount . I want pass to main report .So I have created formula
WhilePrintingRecords;
Shared CurrencyVar PendingTotal := {#PendingAmount};
3) In main report I have created another formula
WhilePrintingRecords;
Shared CurrencyVar PendingTotal;
PendingTotal
please see image to click

Related

JMeter - SubResults are not displaying in Summary table etc

JMeter 5.4.1.
JSR223 script contains several sub steps in complex transaction.
The sub step contains a code like that:
// SendMessage:
def myResult_SendMessage = new org.apache.jmeter.samplers.SampleResult()
myResult_SendMessage.setSampleLabel('SendMessage')
myResult_SendMessage.sampleStart()
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[contains(text(),'Send a message')]")));
WebElement Depot_SendMessage = driver.findElement(By.xpath("//a[contains(text(),'Send a message')]"));
Depot_SendMessage.click();
myResult_SendMessage.setResponseCodeOK()
myResult_SendMessage.setSuccessful(true)
myResult_SendMessage.sampleEnd()
myResult_SendMessage.latencyEnd()
myResult_SendMessage.setResponseData(driver.getPageSource());
SampleResult.addSubResult(myResult_SendMessage,false)
I want to see all sub results, not only the main result, in "Summary table" / "Aggregate report" / "Synthesis report".
Actually, I see subresults only in "View Results Tree", but not in "Summary table".
In user.property file:
jmeter.save.saveservice.subresults=true
in Summary table - configuration - "save sub results" are checked also,
but sub results are not displaying as a labels in resulting tables.
What should I do to collect sub results displayed in Summary table using defined setSampleLabel?
I think you need to add the following lines to user.properties file:
webdriver.sampleresult_class=com.googlecode.jmeter.plugins.webdriver.sampler.SampleResultWithSubs
jmeter.save.saveservice.subresults=true
JMeter restart will be required to pick the properties up
More information:
WebDriver Sampler
Configuring JMeter
Apache JMeter Properties Customization Guide

How do I make a report use RDL code that I updated in the ReportServer db

In Reporting Services 2005, I need to update an embedded image file in over 300 reports to use a new image (re-branding).
I was able to come up with a script that changes the RDL to what I want, but when I run the report in Report Manager, it continues to use the old report definition and display the old image. If I download the RDL to a text file, it has my changes. When I re-upload it, the report displays the new image.
I'd like to know if I need to do something else to tell Reporting Services that there is a new definition.
My t-sql statement is below:
-- Pull updated image code from a sample report I updated with new logo
DECLARE #NewImageString VARCHAR(MAX)
SELECT #NewImageString = SUBSTRING(convert(VARCHAR(max), convert(VARBINARY(max), content)), charindex('<EmbeddedImage Name="logo_1">', convert(VARCHAR(max), convert(VARBINARY(max), content)))
--calculate length of new image string
, 15 + charindex('9k=</ImageData>', convert(VARCHAR(max), convert(VARBINARY(max), content))) --endpoint of new image string
- charindex('<EmbeddedImage Name="logo_1">', convert(VARCHAR(max), convert(VARBINARY(max), content))) -- beginning point of new image string
)
FROM reportserver.dbo.CATALOG
WHERE content IS NOT NULL
AND PATH LIKE '%/Live.Reports%'
AND NAME LIKE 'rpt_Triage_new%'
-- Replace <EmbeddedImage> portion of RDL
UPDATE ReportServer.dbo.CATALOG
SET CONTENT = convert(IMAGE, convert(VARBINARY(max), SUBSTRING(convert(VARCHAR(max), convert(VARBINARY(max), content)), 0, charindex('<EmbeddedImage Name="logo">', convert(VARCHAR(max), convert(VARBINARY(max), content)))) + #NewImageString + SUBSTRING(convert(VARCHAR(max), convert(VARBINARY(max), content)), 28 + charindex('53KOZjtohn0ICAA7</ImageData>', convert(VARCHAR(max), convert(VARBINARY(max), content))), 200000)))
WHERE PATH LIKE '%/Test1.Reports%'
AND NAME LIKE 'rptTriage_to_update%'
-- Update <Value> for Image1 reference
UPDATE ReportServer.dbo.CATALOG
SET content = convert(IMAGE, convert(VARBINARY(max), REPLACE(convert(VARCHAR(max), convert(VARBINARY(max), content)), '<Value>logo</Value>', '<Value>logo_1</Value>')))
WHERE content IS NOT NULL
AND PATH LIKE '%/Test1.Reports%'
AND NAME LIKE 'rptTriage_to_update%'
AND convert(VARCHAR(max), convert(VARBINARY(max), content)) LIKE '%<Value>logo</Value>%'
If your reports are not organized in many folders and if you can access your reports as http://server/reports, then delete all existing reports in the folder and upload all the new rdl files. That will make upload rdl files easy.
My final solution involved using the script above to change the report definitions, then use RSScripter to bulk download and upload the reports. I didn't realize it before, but RSScripter automatically generates a command file to re-upload the reports.

Creating a view and agent in multiple databases

The problem I am encountering is that some of the messages are not accessible by the user ID file, I would like to skip these files instead of the agent crashing out. The error message received is as follows:
Using the view approach if this happened I was able to delete the document temporarily and re-run the agent but if there is a way to skip documents it would be a great help.
Thanks for the help guys.
Ok I have amended the code to a point where I am almost comfortable with it.
Sub Initialize
Dim s As New notessession
Dim db As notesdatabase
Dim view As notesview
Dim doc As notesdocument
Dim nextdoc As notesdocument
Set db = s.currentdatabase
If view Is Nothing Then
Set view = db.CreateView("Encrypted",{Encrypt="1"})
End If
Set doc = view.getfirstdocument
On Error Goto ErrorHandler
While Not doc Is Nothing
nextDocument:
Set nextdoc = view.getnextdocument(doc)
'The below loop is mandatory to ensure that all $File entries are unecrypted
Forall i In doc.items
If i.isencrypted Then
i.isencrypted=False
End If
End Forall
'Must have at least 1 field encrypted in order to call Encrypt method
Dim temp As New NotesItem(doc,"tempjunk","temp")
temp.IsEncrypted=True
Call doc.encrypt
Call doc.save(True, False)
'This portion can now remove the fields relative to encrypting the
'single token encrypted field.
Call doc.removeitem("$Seal")
Call doc.removeitem("$SealData")
Call doc.removeitem("SecretEncryptionKeys")
Call doc.removeitem("Encrypt")
Call doc.removeItem("tempjunk")
Call doc.save(True, False)
Set doc = nextdoc
Wend
Exit Sub
ErrorHandler:
On Error Resume nextDocument
Exit Sub
End Sub
The error handling is not playing nice;
On Error Resume nextDocument is showing up as an error.
I have tried suppressing all of the error warnings which seems to attempt to strip the encryption but I think they body of the messages is being destroyed as a result.
It is no problem to create an agent in a container database and let that agent access documents in all "target" databases and modify them accordingly - No need to copy that agent to all databases.
Only restriction: If the databases are on another server, then on the server security tab of the target server you have to enter the server with the container database as trusted server.
AND: If your agent runs longer than the allowed maximum run time for agents on the server, then it will be killed prematurely.
There is no need to create views in the target databases, you can use NotesDatabase.Search() to get the corresponding documents in the databases...
You can create views by copying them from another database. Say you create a view "Encrypted" in your db with the agent.
Then add a piece of code to get a handle of this view as a NotesDocument:
Dim dbThis As NotesDatabase
Dim viewTemplate As NotesView
Dim docView As NotesDocument
Set dbThis = s.currentDatabase
Set viewTemplate = dbThis.getView("Encrypted")
Set docView = dbThis.Getdocumentbyunid(viewTemplate.Universalid)
In the agent loop, test if view Encrypted exists, if not copy the "view template":
Set view = db.getview("Encrypted")
If view Is Nothing Then
Call docView.Copytodatabase(db)
Set view = db.getview("Encrypted")
End If
Finally, if you insist, a similar procedure might be used to copy the agent to all databases, but for me the idea of running the agent in one db sounds better.
Edited: In the view of full disclosure - of course you can create a view (I guess that was the original question).
If view Is Nothing Then
Set view = db.Createview("Encrypted", {Encrypt="1"})
End If
Or do one-shot dbSearch suggested by Torsten, with a good re-mark of Richard - if you intend to run your code several times - say if encrypted documents might get created again or re-encrypted, rather go for the view.
My method is a bit old fashioned (pre-dates availability of createView) and works well if you need more than selection formula, so you can pre-build a complicated view for re-use.
Performance-wise: whatever method you will choose either creating view using createView or copying from other db or doing dbSearch there is going to be a certain slow-down while the view gets built or dbSearch executes. Karl-Henry's approach will avoid this search/view build, but will be relatively slow if there are not many encrypted documents.
Whichever method you choose - here is a small tip to boost performance. Make your loops like this to release memory as you go; for example, assuming Karl-Henry's approach:
Dim doc1 as NotesDocument
Set doc = col.GetFirstDocument()
Do Until doc Is Nothing
Set doc1 = col.GetNextDocument(doc)
formname = doc.GetItemValue("Form")(0)
If IsElement(exclude(formname))=False Then
Call RemoveEncryption(doc) '*** Your function to remove encryption
End If
' releasing memory when processing thousands of documents improves performance and avoids crashes
Delete doc
Set doc = doc1
Loop
Now again, as you are talking only about migration (so one shot) of 20+ databases, the speed or implementation details should not be that critical.
If you have to process all (or almost all) documents in each database, you can use db.AllDocuments. It is more efficient than using db.Search() with an #All formula.
If you want to exclude certain documents, perhaps based on the form name, I would build a list of forms to exclude, and then use IsElement to check each document being processed against that list.
Dim exclude List As Boolean
exclude("FormA")=True
exclude("FormB")=True
Set col = db.AllDocuments
Set doc = col.GetFirstDocument()
Do Until doc Is Nothing
formname = doc.GetItemValue("Form")(0)
If IsElement(exclude(formname))=False Then
Call RemoveEncryption(doc) '*** Your function to remove encryption
End If
Set doc = col.GetNextDocument(doc)
Loop
Something like that. By the way, you can create the list as any data type. I just choose Boolean as it is a small data type, and that it makes the code easier to read. The IsElement() function just check if the element exists, it does not use the value you set.
You would wrap the code above in a function and call it once per database.
Appended answer, based on additional info in original question:
That should not be hard, just add error handling to your code.
Before you start to loop throung the document:
On Error Goto errHandler
Before you get the next document in the loop:
nextDocument:
At the end of your code:
Exit Sub
errHandler:
Resume nextDocument
End Sub
Try that.

compile error : procedure declaration does not match description of event or procedure having the same name

I have copied my entire vb6 code from one machine to another , now when i was running my code on another machine ,it shows error like : compile error : procedure declaration does not match description of event or procedure having the same name,
This is the code :
Private Sub MKDataGrid1_KeyPress()
If MKDataGrid1.Col = 0 Or MKDataGrid1.Col = 1 Or MKDataGrid1.Col = 2 Or MKDataGrid1.Col = 3 Then
MKDataGrid1.AllowUpdate = False
MsgBox "This field is not to edit. Thnks"
MKDataGrid1.AllowUpdate = False
cmdAdd.visible = True
cmdAdd.SetFocus
cmdAdd.visible = False
Else
MKDataGrid1.AllowUpdate = True
End If
End Sub
It looks like your declaration for the event got messed up. Generally speaking, the KeyPress event takes the parameter KeyAscii As Integer. I recommend temporarily remarking out your routine and then selecting the KeyPress event manually from the dropdown in the code window. Then copy your previous content back into the KeyPress that VB inserted.
I have to register the vb6datagrid.ocx on my computer for this , i have register this .ocx on my machine , actually i have again copy the new code in my machine from my old machine and before runing it i have open Project >> components >> designers and from there selected the require components and have removed the unwanted , and then i have run the project so again i get the error but when i go to view object there again i find the object missing so i have placed the datagrid and then its running fine :)

ms access linked image relitive path

I have an Image object.
I have the Picture type set to linked, so I can change the picture if I want.
I have the Picture property set to the picture name.
I would think that access would use relitive addressing and simple looking in the current directory for the image. But it does not and I get an error telling me it cannot find the picture.
Anyone have a solution? (Other than setting the Picture type to embedded or using the full file address?)
Thanks!
Update:
Tried this:
Private Sub Form_Load()
Dim file As String
file = CurrentDb().Name
file = Replace(file, ".mdb", ".bmp")
Me.Image46.Picture = file
End Sub
It works, except I still get the error message. I click O.K. and it works. Just need the error message to go away.
SOLUTION: Use the above code (or the code posted in the answer below) and then set the 'picture type' to "embedded" and then delete the 'picture' field so that it says "(none)".
Save and run.
It should work.
THANKS!
You could set the property on the forms OnLoad event like this
Me.imgMy_image.picture=getDBPath & “mypicture.bmp”
Here is the getDBPath function
Public Function GetDBPath() As String
Dim strFullPath As String
Dim I As Integer
strFullPath = CurrentDb().Name
For I = Len(strFullPath) To 1 Step -1
If Mid(strFullPath, I, 1) = "\" Then
GetDBPath = Left(strFullPath, I)
Exit For
End If
Next
End Function
Before anyone comments yes I know in access 2000 and above you can use currentproject.path but I’m stuck in the land that time forgot so need that custom function, it still works with later versions of access
Current folder depends of the way you open database in Access. At least, if you open it thru "File-Open", current folder changes to the folder of MDB file. But if you open via double-clicking MDB in explorer, it does not.

Resources